Error de cx_freeze "zlib no disponible" cuando se utilizan varios subprocesos

Tengo una aplicación Python que funciona perfectamente cuando se ejecuta a través del intérprete estándar, perono cuando se congela concx_freeze.

Mi aplicación hace uso de la pitón.Threading módulo, y normalmente tiene alrededor de 5 componentes en ejecución, cada uno de los cuales se puede habilitar / deshabilitar individualmente en su configuración, y cada uno se ejecuta en su propio subproceso individual.

Con 1 o 2 componentes habilitados, no hay problema. Sin embargo, cuando hay 3 o más componentes habilitados, veo el siguiente mensaje de error para todos o casi todos mis hilos:

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

Algunas cosas a tener en cuenta:

Python esno instalado enC:\Python\64-bit\3.3, así que no estoy seguro de por qué esta ruta aparece en la salida anterior. Se instala en su ubicación predeterminada deC:\Python33. (No estoy seguro de si el camino que se muestra arriba es uno ficticio, o quizás el camino de la persona que compiló una de mis dependencias).Para reiterar: esto comienza a ocurrir constantemente cuando inicio más de 2 subprocesos o menos. EsoNunca sucede con solo 1 subproceso activo, y nunca he visto que suceda con 2 subprocesos activos.Este problemasolamente sucede cuandocx_freeze se utiliza Ejecutarlo con el intérprete de Python no produce errores. He intentado algunos diferentessetup.py directivas (por ejemplo,appendScriptToLibrary, appendScriptToExe, copyDependentFiles, create_shared_zip), pero el problema es siempre el mismo.Mi código no hace uso de las funciones zip, por lo que esto debe ser algo específico del proceso de congelación.

Mis pensamientos hasta ahora:

Creo que hay algún problema con un hilo que intenta acceder alzlib ozipimport módulos cuando otro hilo los está utilizando (es decir, tiene un bloqueo en ellos). (Sin embargo, es interesante que esto no suceda con 2 hilos). Mi búsqueda en Google me ha llevado a investigar un poco sobre la GIL. ¿Podría ser un problema aquí? O, ¿hay alguna manera de permitir que los hilos solo tomen un bloqueo compartido en un archivo en lugar de un bloqueo exclusivo?Ser un novato relativo concx_freeze, He intentado algunos métodos diferentes de incluir elzlib módulo ensetup.py. Sin embargo, no creo que esto sea un problema conzlib específicamente, ya que funciona bien fuera decx_freeze.

Ambiente:

Windows 7 de 64 bitsPython 3.3 de 64 bitscx_freeze 4.3.2

Verhttp://www.filedropper.com/threadtest Para una reproducción de este número con código mínimo.

Respuestas a la pregunta(0)

Su respuesta a la pregunta