New submission from Craig Holmquist: Running the attached test script:
$ time python test.py enum real 0m6.546s user 0m6.530s sys 0m0.007s $ time python test.py int real 0m0.384s user 0m0.377s sys 0m0.000s I encountered this with a script that yielded a sequence of objects (potentially a few hundred thousand of them) and categorized them with instances of an Enum subclass. The consumer of that iteration processes each object with a switch-case-like comparison of the category, checking it sequentially against each instance of the Enum. This seems like a fairly common use case. >From cProfile it looks like EnumMeta.__getattr__ and _is_dunder are the main >bottlenecks: [...] 7/1 0.000 0.000 0.000 0.000 abc.py:194(__subclasscheck__) 1 0.000 0.000 0.001 0.001 enum.py:1(<module>) 3 0.000 0.000 0.000 0.000 enum.py:132(<genexpr>) 2000021 0.988 0.000 0.988 0.000 enum.py:16(_is_dunder) 19 0.000 0.000 0.000 0.000 enum.py:24(_is_sunder) 2000002 1.825 0.000 2.813 0.000 enum.py:241(__getattr__) 17 0.000 0.000 0.000 0.000 enum.py:282(__setattr__) 3 0.000 0.000 0.000 0.000 enum.py:342(_get_mixins_) 3 0.000 0.000 0.000 0.000 enum.py:387(_find_new_) [...] ---------- components: Library (Lib) files: test.py messages: 236234 nosy: craigh priority: normal severity: normal status: open title: Enum comparisons are 20x slower than comparing equivalent ints type: performance versions: Python 3.4 Added file: http://bugs.python.org/file38177/test.py _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue23486> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com