[pypy-issue] Issue #2728: performance collapse with setattr in a large for-loop (pypy/pypy)

biblicabeebli issues-reply at bitbucket.org
Sat Jan 6 22:15:17 EST 2018


New issue 2728: performance collapse with setattr in a large for-loop
https://bitbucket.org/pypy/pypy/issues/2728/performance-collapse-with-setattr-in-a

biblicabeebli:

Hi...

I was interested in testing the performance difference between CPython's attribute assignment on class objects and dictionary key value assignment.  I wrote a (bad) script to test this, ensured it was compatible and equivalent between Python 2 and 3, and ran it on CPython 2.7 and 3.6.  Then, for goofs, I thought I would test it on pypy.

pypy version info:
pypy3.5-5.10
compiled using pyenv 1.2.0-8-g785738d
running on mac os 10.11.6
clang version:
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin15.6.0
Thread model: posix

Well, it either never finishes execution, or it takes more than 1 minute vs CPython's 0.057096 execution of that problematic for-loop on my computer.

The eventual stack trace when after I hit ^C is pasted below, I therefore assume it is setattr that is causing the issue.  Note: I tested both the class's __setattr__ method and the built in setattr() function, both have this problem.

^C
Traceback (most recent call last):
  File "dict_class_test.py", line 104, in <module>
    do(100000)  # <-- takes forever???
  File "dict_class_test.py", line 41, in do
    x.__setattr__(i_string, i)




More information about the pypy-issue mailing list