Ошибка cx_freeze «zlib not avaiable» при использовании нескольких потоков

У меня есть приложение Python, которое отлично работает при запуске через стандартный интерпретатор, ноне когда заморожено с.cx_freeze

Мое приложение использует PythonThreading модуль, и обычно имеет около 5 работающих компонентов, каждый из которых может быть индивидуально включен / отключен в своей конфигурации, и каждый работает в своем собственном отдельном потоке.

С 1 или 2 включенными компонентами проблем нет. Однако, когда включены 3 или более компонентов, я вижу следующее сообщение об ошибке для всех или почти всех моих потоков:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Python\64-bit\3.3\lib\threading.py", line 637, in _bootstrap_inner
  File "", line 21, in run
    from module import screenshot
  File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1616, in _handle_fromlist
  File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 313, in _call_with_frames_removed
  File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1567, in _find_and_load
  File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1534, in _find_and_load_unlocked
  File "", line 1, in 
    from PIL import ImageGrab
  File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1567, in _find_and_load
  File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1534, in _find_and_load_unlocked
zipimport.ZipImportError: can't decompress data; zlib not available

Несколько вещей, на которые стоит обратить внимание:

Python этоне установлен вC:\Python\64-bit\3.3, так что я'Я не уверен, почему этот путь появляется в выводе выше. Он установлен по умолчанию вC:\Python33, (Не уверен, является ли путь, показанный выше, фиктивным, или, возможно, путь человека, который составил одну из моих зависимостей.)Повторюсь - это начинает происходить постоянно, когда я запускаю более 2 потоков или около того. Этоникогда случается только с 1 активным потоком, и я никогда не видел, чтобы это случилось с 2 активными потоками.Эта проблематолько случается когдаcx_freeze используется. Запуск его с интерпретатором Python не вызывает ошибок. Я'мы пробовали несколько разныхsetup.py директивы (например,,,appendScriptToLibraryappendScriptToExecopyDependentFilescreate_shared_zip), но вопрос всегда один и тот же.Мой код неt использовать функции zip - так что это должно быть что-то особенное для процесса замораживания.

Мои мысли до сих пор:

Я думаю, что есть некоторая проблема с потоком, пытающимся получить доступ кzlib или жеzipimport модули, когда их использует другой поток (то есть блокирует их). (Интересно, что это не такХотя это может произойти в двух направлениях. Мой Google заставил меня немного изучить GIL - может ли это быть проблемой здесь? Или есть ли способ разрешить потокам захватывать только общую блокировку файла вместо эксклюзивной блокировки?Быть относительным новичком сcx_freezeЯмы пробовали несколько разных методов, включаяzlib модуль вsetup.py, Тем не менее, я нене думаю, что это проблема сzlib в частности, так как он работает нормально за пределами.cx_freeze

Среда:

Windows 7 64-битнаяPython 3.3 64-битныйcx_freeze 4.3.2

Увидетьhttp://www.filedropper.com/threadtest для воспроизведения этого вопроса с минимальным кодом.

Ответы на вопрос(0)

Ваш ответ на вопрос