cx_freeze „zlib not avaiable” podczas używania wielu wątków

Mam aplikację Pythona, która działa idealnie, gdy jest uruchamiana przez standardowy interpreter, alenie po zamrożeniucx_freeze.

Moja aplikacja korzysta z PythonaThreading moduł i zazwyczaj ma około 5 uruchomionych komponentów, z których każdy może być indywidualnie włączany / wyłączany w swojej konfiguracji, a każdy z nich działa we własnym indywidualnym wątku.

Przy włączonym 1 lub 2 komponentach bez problemu. Jednak gdy włączone są 3 lub więcej składników, wyświetlany jest następujący komunikat o błędzie dla wszystkich lub prawie wszystkich moich wątków:

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 "<absolute path to my .py file on disk>", 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 "<absolute path to my .py file on disk>", line 1, in <module>
    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

Kilka rzeczy do odnotowania:

Python tonie zainstalowany wC:\Python\64-bit\3.3, więc nie jestem pewien, dlaczego ta ścieżka pojawia się na wyjściu powyżej. Jest zainstalowany w domyślnej lokalizacjiC:\Python33. (Nie jestem pewien, czy ścieżka pokazana powyżej jest atrapą, czy może ścieżką osoby, która skompilowała jedną z moich zależności).Powtarzam - zaczyna się to stale, gdy uruchamiam więcej niż 2 wątki. Tonigdy dzieje się tylko z 1 aktywnym wątkiem i nigdy nie widziałem, aby stało się to z dwoma aktywnymi wątkami.Ten przypadektylko dzieje się, gdycx_freeze jest używany. Uruchomienie go za pomocą interpretera Pythona nie powoduje błędów. Próbowałem kilku różnychsetup.py dyrektywy (np.appendScriptToLibrary, appendScriptToExe, copyDependentFiles, create_shared_zip), ale problem jest zawsze taki sam.Mój kod nie korzysta z funkcji zip - więc musi to być coś specyficznego dla procesu zamrażania.

Moje myśli do tej pory:

Myślę, że jest jakiś problem z wątkiem próbującym uzyskać dostęp dozlib lubzipimport moduły, gdy używa ich inny wątek (tzn. ma na nich blokadę). (Ciekawe, że nie dzieje się tak jednak w przypadku dwóch wątków.) Moja praca z Google sprawiła, że ​​przeprowadziłem kilka badań nad GIL - czy to może być problem? Czy istnieje jakiś sposób, aby wątki mogły pobrać blokadę współdzieloną z pliku zamiast blokady wyłącznej?Będąc względnym nowicjuszem zcx_freeze, Wypróbowałem kilka różnych metod włączaniazlib moduł wsetup.py. Nie sądzę jednak, aby był to problemzlib specjalnie, ponieważ działa dobrze pozacx_freeze.

Środowisko:

Windows 7 64-bitPython 3.3 64-bitcx_freeze 4.3.2

Widziećhttp://www.filedropper.com/threadtest w celu odtworzenia tego problemu z minimalnym kodem.

questionAnswers(0)

yourAnswerToTheQuestion