-
-
Couldn't load subscription status.
- Fork 33.3k
Description
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
Metadata
Metadata
Assignees
Labels
Projects
Status