cx_freeze "zlib not avaiable" erro ao usar vários encadeamentos

Eu tenho um aplicativo Python que funciona perfeitamente quando executado através do interpretador padrão, masnão quando congelado comcx_freeze.

Meu aplicativo faz uso do pythonThreading módulo, e normalmente tem cerca de 5 componentes em execução, cada um dos quais pode ser individualmente ativado / desativado em sua configuração, e cada um executando em seu próprio segmento individual.

Com 1 ou 2 componentes ativados, não há problema. No entanto, quando 3 ou mais componentes estão ativados, vejo a seguinte mensagem de erro para todos ou quase todos os meus threads:

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

Algumas coisas para observar:

Python énão instalado emC:\Python\64-bit\3.3, então não tenho certeza porque esse caminho aparece na saída acima. Ele é instalado em seu local padrão deC:\Python33. (Não tenho certeza se o caminho mostrado acima é falso, ou talvez o caminho da pessoa que compilou uma das minhas dependências.)Para reiterar - isso começa a acontecer constantemente quando eu inicio mais de 2 threads ou mais. istoNunca acontece com apenas 1 thread ativo, e eu nunca vi isso acontecer com 2 threads ativos.Esse problema acontece quandocx_freeze é usado. Executá-lo com o interpretador Python não produz erros. Eu tentei alguns diferentessetup.py diretivas (por exemplo,appendScriptToLibrary, appendScriptToExe, copyDependentFiles, create_shared_zip), mas a questão é sempre a mesma.Meu código não faz uso de funções zip - então isso deve ser algo específico para o processo de congelamento.

Meus pensamentos até agora:

Eu acho que há algum problema com um thread tentando acessar ozlib ouzipimport módulos quando outro thread está usando-os (ou seja, tem um bloqueio sobre eles). (Interessante que isso não aconteça para 2 tópicos.) Meu Google-ing me fez fazer alguma pesquisa sobre o GIL - isso poderia ser um problema aqui? Ou, existe alguma maneira de permitir que os segmentos só pegue um bloqueio compartilhado em um arquivo em vez de um bloqueio exclusivo?Ser um novato relativo comcx_freeze, Eu tentei alguns métodos diferentes de incluir ozlib módulo emsetup.py. No entanto, não acho que isso seja um problema comzlib especificamente, uma vez que funciona bem fora decx_freeze.

Meio Ambiente:

Windows 7 de 64 bitsPython 3.3 de 64 bitscx_freeze 4.3.2

Vejohttp://www.filedropper.com/threadtest para uma reprodução desse problema com código mínimo.

questionAnswers(0)

yourAnswerToTheQuestion