Импорт pyglet.resource занимает большое количество времени в больших каталогах

Импорт pyglet.resourceзанимает очень много времени при запуске из каталога с большой структурой дерева каталогов. Это происходит с простым однострочником:import pyglet.resource, что в достаточно большом каталоге (скажем, в моем домашнем каталоге) просто приведет к зависанию интерпретатора.

Если импорт прерван с помощьюCc, будет напечатана следующая трассировка, предполагающая, что просматривается все дерево каталогов:

>>> import pyglet.resource
^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/pymodules/python2.7/pyglet/__init__.py", line 306, in __getattr__
    __import__(import_name)
  File "/usr/lib/pymodules/python2.7/pyglet/resource.py", line 680, in <module>
    _default_loader = _DefaultLoader()
  File "/usr/lib/pymodules/python2.7/pyglet/resource.py", line 291, in __init__
    self.reindex()
  File "/usr/lib/pymodules/python2.7/pyglet/resource.py", line 335, in reindex
    for dirpath, dirnames, filenames in os.walk(path):
  File "/usr/lib/python2.7/os.py", line 294, in walk
    for x in walk(new_path, topdown, onerror, followlinks):
  File "/usr/lib/python2.7/os.py", line 294, in walk
    for x in walk(new_path, topdown, onerror, followlinks):
  File "/usr/lib/python2.7/os.py", line 294, in walk
    for x in walk(new_path, topdown, onerror, followlinks):
  File "/usr/lib/python2.7/os.py", line 294, in walk
    for x in walk(new_path, topdown, onerror, followlinks):
  File "/usr/lib/python2.7/os.py", line 294, in walk
    for x in walk(new_path, topdown, onerror, followlinks):
  File "/usr/lib/python2.7/os.py", line 294, in walk
    for x in walk(new_path, topdown, onerror, followlinks):
  File "/usr/lib/python2.7/os.py", line 294, in walk
    for x in walk(new_path, topdown, onerror, followlinks):
  File "/usr/lib/python2.7/os.py", line 294, in walk
    for x in walk(new_path, topdown, onerror, followlinks):
  File "/usr/lib/python2.7/os.py", line 284, in walk
    if isdir(join(top, name)):
  File "/usr/lib/python2.7/genericpath.py", line 41, in isdir
    st = os.stat(s)
KeyboardInterrupt

(С переменным номеромwalkзвонки, в зависимости от того, как долго скрипт остается запущенным)

Это удивительно, так как при импорте pyglet.resource в действительности не требуется проходить через каталог скрипта. Чем это вызвано, и можно ли это исправить или обойти?


Информация о версии: Python 2.7, Pyglet 1.1.4, Ubuntu 12.04

Эта проблема, по-видимому, была описана в этом обсуждении пользователей pyglet, где она была неправильно отнесена к созданию pyglet.resource.FileLocation объект. Тем не менее проблема действительно возникает во время подразумеваемого импорта в сценарии, как

import pyglet

...

pyglet.resource.FileLocation(...)  # pyglet.resource is imported here;
                                   # FileLocation is not the problem

1 ответ

Похоже, что эта проблема была зарегистрирована как проблема № 367 в Pyglet; это было исправлено в ревизии 9664bc47446c (которая была после выпуска 1.1.4).

Другие вопросы по тегам