在我的项目中,我有一长串要定价的交易,因此我将其分成大块并将其委托给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(...)