我想冻结我的程序,其中包括一个使用多处理(http://pyevolve.sourceforge.net/)和py2exe的库。这很好用;我可以运行生成的.exe和(禁用多处理)我的程序做我期望它做的事情。
启用多处理时出现问题。起初我的程序完全重新启动每个CPU核心。我通过将freeze_support()
添加到创建进程池的库来修复此问题。这解决了一个问题但创建了另一个问题:现在池中的每个worker都会创建以下AttributeError:
Process PoolWorker-XY:
Traceback (most recent call last):
File "multiprocessing\process.pyc", line 258, in _bootstrap
File "multiprocessing\process.pyc", line 114, in run
File "multiprocessing\pool.pyc", line 102, in worker
File "multiprocessing\queues.pyc", line 378, in get
AttributeError: 'module' object has no attribute 'my_multiprocessing_fct'
这是启动多处理的库的一部分:
...
if self.multiProcessing[0] and MULTI_PROCESSING:
proc_pool = Pool(processes=self.multiProcessing[2])
if self.multiProcessing[1]:
results = proc_pool.map(multiprocessing_eval_full, self.internalPop)
proc_pool.close()
proc_pool.join()
...
else:
results = proc_pool.map(multiprocessing_eval, self.internalPop)
proc_pool.close()
proc_pool.join()
...
...
我在代码顶部添加了freeze_support():
try:
from multiprocessing import cpu_count, Pool, freeze_support
freeze_support()
CPU_COUNT = cpu_count()
MULTI_PROCESSING = True if CPU_COUNT > 1 else False
except ImportError:
MULTI_PROCESSING = False
从我的IDE启动时,代码工作正常,但不是通过生成的.exe。