pickletools optimize performance degraded with factor 3-4 in python 3.14
Bug report
Bug description:
The pickletools.optimize code suddenly performs bad starting with python 3.14, with or without JIT.
The degradation is a factor 3 to 4.
It is easy to test.
First use this script to make a sizeable dict and pickle it and write it to file.
import pickle x = {} for i in range(1, 1000000): x[i] = f"ii{i:>07}" with open("pickled", "wb") as fh: pickle.dump(x, fh, protocol=4)
Then write a script, let's call it optpickle.py to read the pickled dict from file and optimize it and write the result to another file.
# optpickle.py import pickletools with open("pickled", "rb") as fh: p = fh.read() s = pickletools.optimize(p) with open("pickledopt", "wb") as fh: fh.write(s)
Now execute this in three separate terminal windows, one geared to python 3.13, one to python 3.14.0 without JIT, and one to python 3.14.0 with JIT.
My results on a mac with M1 processor were
| version | time elapsed | cpu time |
|---|---|---|
| 3.13 | 1.67 | 1.773 |
| 3.14.0 no JIT | 6.52 | 6.664 |
| 3.14.0 JIT | 6.52 | 6.642 |
That is a dramatic drop in performance!
The filesizes are 16.9 MB for the unoptimized file and 15.9 for the optimized one.
I decided to drop the optimization in an app where I used it heavily
CPython versions tested on:
3.14
Operating systems tested on:
macOS