为什么我不能在cx_Freeze中创建一个ThreadPool?

时间:2019-06-29 10:03:18

标签: python-3.x keras python-multiprocessing cx-freeze

Traceback (most recent call last):

  File "C:\Users\Jun\AppData\Local\Programs\Python\Python35\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 14, in run

    module.run()

  File "C:\Users\Jun\AppData\Local\Programs\Python\Python35\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run

    exec(code, m.__dict__)

  File "D:/ruanjian/new/Ui-Disign/hand_up_625.py", line 25, in <module>

    from keras.models import load_model

  File "C:\Users\Jun\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\__init__.py", line 3, in <module>

    from . import utils

  File "C:\Users\Jun\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\utils\__init__.py", line 4, in <module>

    from . import data_utils

  File "C:\Users\Jun\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\utils\data_utils.py", line 19, in <module>

    from multiprocessing.pool import ThreadPool

ImportError: No module named 'multiprocessing.pool'

2 个答案:

答案 0 :(得分:0)

首先,您似乎缺少了multiprocessing library,您可以通过点子获得。

第二,Python 3.5's multiprocessing documentation不包括ThreadPool。如果您想要一个进程池,则在寻找:

 class multiprocessing.pool.Pool([processes[, initializer[, initargs[, maxtasksperchild[, context]]]]])

答案 1 :(得分:0)

尝试在'multiprocessing'脚本中将packages添加到build_exe_options的{​​{1}}列表中:

setup.py

有关更多详细信息,请参见cx_Freeze documentation

请注意,冻结的脚本必须调用build_exe_options = {"packages": ['multiprocessing']} # ... setup( name = ..., # complete! ... options = {"build_exe": build_exe_options}, executables = [Executable(...)]) 才能继续进行多处理。根据{{​​3}}:

  

添加对冻结使用多处理程序的程序以生成Windows可执行文件的支持。 (已通过 py2exe PyInstaller cx_Freeze 进行了测试。)

     

需要在主模块的multiprocessing.freeze_support()行之后直接调用此函数。例如:

     
if __name__ == '__main__'
     

如果省略了from multiprocessing import Process, freeze_support def f(): print('hello world!') if __name__ == '__main__': freeze_support() Process(target=f).start() 行,则尝试运行冻结的可执行文件将引发RuntimeError。

     

在Windows以外的任何其他操作系统上调用freeze_support()时均无效。此外,如果该模块由Windows上的Python解释器正常运行(该程序尚未冻结),则freeze_support()无效。