使用多处理冻结库时的AttributeError

时间:2016-07-12 09:52:07

标签: python python-2.7 multiprocessing pyevolve

我想冻结我的程序,其中包括一个使用多处理(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。

0 个答案:

没有答案