[pypy-issue] Issue #3005: Instances from a class returned by a function getting slower and slower (pypy/pypy)

Simp fally issues-reply at bitbucket.org
Thu Apr 18 16:01:53 EDT 2019


New issue 3005: Instances from a class returned by a function getting slower and slower
https://bitbucket.org/pypy/pypy/issues/3005/instances-from-a-class-returned-by-a

Simp fally:

pypy3 v6.0.0 linux64 / python3 3.5.3 / debian 9.0

The code attached explains the problem in 15lines better than I could with word (see terrible title).

On my laptop, here are the results :

python3 test_ai.py :

Using factory's class :
1 took 1.2839s
2 took 1.2842s
3 took 1.2922s
4 took 1.2745s
5 took 1.2786s
6 took 1.2802s
7 took 1.3013s
8 took 1.3907s
9 took 1.3533s
Using simple class :
1 took 1.2037s
2 took 1.2108s
3 took 1.2229s
4 took 1.2286s
5 took 1.2041s
6 took 1.2028s
7 took 1.2059s
8 took 1.2153s
9 took 1.2038s

Everything is normal here.

pypy3 test_ai.py :

Using factory's class :
1 took 0.0088s
2 took 0.0092s
3 took 0.0739s
4 took 0.0891s
5 took 0.1015s
6 took 0.1285s
7 took 0.1302s
8 took 0.1465s
9 took 0.1648s
Using simple class :
1 took 0.0089s
2 took 0.0077s
3 took 0.0078s
4 took 0.0077s
5 took 0.0078s
6 took 0.0076s
7 took 0.0078s
8 took 0.0078s
9 took 0.0076s

Here the factory class' instances are slower and slower (with no signs of stopping, even gets slower than python3 at some point), while the normal class behave perfectly normal.

pypy3 -jit off test_ai.py :

Using factory's class :
1 took 2.8622s
2 took 2.8545s
3 took 2.8629s
4 took 2.8517s
5 took 2.8687s
6 took 2.8776s
7 took 2.8641s
8 took 2.8607s
9 took 2.8625s
Using simple class :
1 took 2.9355s
2 took 2.9193s
3 took 2.9442s
4 took 2.9261s
5 took 3.1136s
6 took 3.2729s
7 took 3.3295s
8 took 3.2764s
9 took 3.2918s

Slower than python3 but at least it's stable.


This bug has effected a larger project of mine and I managed to find the minimal code for it. It's easy to work around it but it means throwing away class factories.




More information about the pypy-issue mailing list