使用多个线程时cx_freeze"zlib not avaiable"错误

 joyjz 发布于 2023-02-13 21:17

我有一个Python应用程序,它在通过标准解释器运行时非常有效,但在冻结时则不行cx_freeze.

我的应用程序使用了python Threading模块,通常有大约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的指令(例如appendScriptToLibrary,appendScriptToExe,copyDependentFiles,create_shared_zip),但问题始终是相同的.

我的代码没有使用zip函数 - 所以这必须是冻结过程特有的.

到目前为止我的想法:

我认为当另一个线程正在使用它们时,一个线程试图访问zlibzipimport模块存在一些问题(即锁定它们).(有趣的是,这不会发生在2个线程中.)我的Google-ing让我对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,以最少的代码复制此问题.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有