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

J.E*_*E.Y 5 python python-module python-multiprocessing

在我的项目中,我有一长串要定价的交易,因此我将其分成多个块并将它们委托给 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()
Run Code Online (Sandbox Code Playgroud)

问题是我们必须为所有定价导入一个内部模块,比如magic。

import magic
class Valuation(object):
    ....
Run Code Online (Sandbox Code Playgroud)

该模块似乎没有传播到池工作人员中,错误消息如下所示:

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' 
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮忙吗?

更新:

为了回答评论中的一些问题,提供更多详细信息:

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

if __name__ == '__main__':
   valu = Valuation(...)
   valu.pool_calculate(...)
Run Code Online (Sandbox Code Playgroud)