启动python多处理池工作程序时发生ModuleNotFoundError

时间:2019-08-27 15:20:35

标签: python python-multiprocessing python-module

在我的项目中,我有一长串要定价的交易,因此我将其分成大块并将其委托给multiprocessing#Pool进行处理。假设包装类称为 Valuation ,方法为 pool_calculate (),如下所示:

    multiprocessing.freeze_support() 
    p = multiprocessing.Pool()  # default is a number of processes equal to the number of CPU cores
    results = p.map(self.pooled_valuation_tasks, chunks)
    p.close()
    p.join()

问题在于我们必须为所有定价导入内部模块,例如 magic

import magic
class Valuation(object):
    ....

似乎该模块未传播到池工作程序中,错误消息如下:

Process SpawnPoolWorker-3:
Traceback (most recent call last):
  File "c:\opt\magic0.0.46\PythonVenv\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "c:\opt\magic0.0.46\PythonVenv\lib\multiprocessing\process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "c:\opt\magic0.0.46\PythonVenv\lib\multiprocessing\pool.py", line 108, in worker
    task = get()
  File "c:\opt\magic0.0.46\PythonVenv\lib\multiprocessing\queues.py", line 337, in get
    return _ForkingPickler.loads(res)
ModuleNotFoundError: No module named 'magic.rec' 

有人可以帮忙吗?

更新

针对评论中的某些问题提供更多详细信息:

这是我实例化类并调用func的方式:

if __name__ == '__main__':
   valu = Valuation(...)
   valu.pool_calculate(...)

0 个答案:

没有答案