cx_freeze "Zlib nicht verfügbar" -Fehler bei Verwendung mehrerer Threads

Ich habe eine Python-Anwendung, die einwandfrei funktioniert, wenn sie über den Standard-Interpreter ausgeführt wird, abernicht wenn gefroren mitcx_freeze.

Meine Anwendung nutzt die PythonThreading Modul, und in der Regel werden ungefähr 5 Komponenten ausgeführt, von denen jede in ihrer Konfiguration einzeln aktiviert / deaktiviert werden kann und jede in einem eigenen Thread ausgeführt wird.

Mit 1 oder 2 aktivierten Komponenten kein Problem. Wenn jedoch 3 oder mehr Komponenten aktiviert sind, wird für alle oder fast alle meiner Threads die folgende Fehlermeldung angezeigt:

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

Ein paar Dinge zu beachten:

Python istnicht installiert beiC:\Python\64-bit\3.3Daher bin ich mir nicht sicher, warum dieser Pfad in der Ausgabe oben angezeigt wird. Es wird am Standardspeicherort von installiertC:\Python33. (Ich bin mir nicht sicher, ob es sich bei dem oben gezeigten Pfad um einen Dummy handelt oder um den Pfad der Person, die eine meiner Abhängigkeiten kompiliert hat.)Wiederholen - dies geschieht ständig, wenn ich mehr als 2 Threads oder so starte. Esnoch nie passiert mit nur 1 aktiven Thread, und ich habe noch nie gesehen, dass es mit 2 aktiven Threads passiert.Dieses Problemnur passiert wenncx_freeze wird eingesetzt. Das Ausführen mit dem Python-Interpreter führt zu keinen Fehlern. Ich habe ein paar andere ausprobiertsetup.py Richtlinien (z.appendScriptToLibrary, appendScriptToExe, copyDependentFiles, create_shared_zip), aber das Problem ist immer das gleiche.Mein Code verwendet keine Zip-Funktionen - dies muss also für den Einfrierprozess spezifisch sein.

Meine bisherigen Gedanken:

Ich denke, es gibt ein Problem mit einem Thread, der versucht, auf den zuzugreifenzlib oderzipimport Module, wenn ein anderer Thread sie verwendet (d. h. sie sind gesperrt). (Interessanterweise passiert dies nicht für 2 Threads.) Durch mein Google-ing habe ich mich ein wenig mit der GIL befasst - könnte dies hier ein Problem sein? Oder gibt es eine Möglichkeit, zuzulassen, dass die Threads anstelle einer exklusiven Sperre nur eine gemeinsam genutzte Sperre für eine Datei abrufen?Als relativer Neuling mitcx_freezeIch habe ein paar verschiedene Methoden ausprobiert, um diezlib Modul insetup.py. Ich glaube jedoch nicht, dass dies ein Problem istzlib speziell, da es außerhalb von gut läuftcx_freeze.

Umgebung:

Windows 7 64-BitPython 3.3 64-Bitcx_freeze 4.3.2

Sehenhttp://www.filedropper.com/threadtest für eine Reproduktion dieses Problems mit minimalem Code.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage