Импорт 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).