arn*_*d12 5 python zlib cx-freeze
我有一个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 "<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
Run Code Online (Sandbox Code Playgroud)
有几点需要注意:
C:\Python\64-bit\3.3,所以我不确定为什么这条路径出现在上面的输出中.它安装在默认位置C:\Python33.(不确定上面显示的路径是否是虚拟路径,或者是编译我的某个依赖项的人的路径.)cx_freeze使用时发生.使用Python解释器运行它不会产生任何错误.我已经尝试了几种不同setup.py的指令(例如appendScriptToLibrary,appendScriptToExe,copyDependentFiles,create_shared_zip),但问题始终是相同的.到目前为止我的想法:
zlib或zipimport模块存在一些问题(即锁定它们).(有趣的是,这不会发生在2个线程中.)我的Google-ing让我对GIL做了一些研究 - 这可能是一个问题吗?或者,有没有办法允许线程只获取文件上的共享锁而不是独占锁?cx_freeze,我尝试了几种不同的方法来包含zlib模块setup.py.但是,我不认为这是一个zlib具体的问题,因为它在外面运行良好cx_freeze.环境:
请参阅http://www.filedropper.com/threadtest,以最少的代码复制此问题.
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |