为什么在 Python 多处理中将 start 方法从 'fork' 更改为 'spawn' 不允许我再运行我的工作?

Ami*_*mir 11 python multiprocessing spawn python-3.x python-multiprocessing

我可以使用multiprocessing.Processstart 方法运行后台函数fork。出于某种原因,我需要这个子进程在运行时启动一个新环境。因此,我将 start 方法设置为spawnviamultiprocessing.set_start_method('spawn')并通过运行作业job.start(),出现以下错误:

Can't pickle <class 'module'>: attribute lookup module on builtins failed
Run Code Online (Sandbox Code Playgroud)

但是,我不会在我调用的函数中使用pickle。我可能做错了什么?在spawn模式下运行进程时,是否有我应该遵循的一般经验法则?

仅供参考:我在一台装有 Ubuntu 16.04 的机器上

J_H*_*J_H 7

\n

有没有一个通用的经验法则...

\n
\n

是的。您遇到了这个记录在案的限制:

\n

https://docs.python.org/3/library/multiprocessing.html

\n
\n

有一些额外的限制不适用于 fork 启动方法。

\n

更好的酸洗性

\n

确保 Process 的所有参数。init () 是可腌制的。另外,如果您子类化 Process,请确保在调用 Process.start 方法时实例将是可挑选的。

\n
\n

你正在 ubuntu 上运行,所以fork可能是正确的答案。如果您需要解决不兼容的要求fork,那么您将需要清楚地记录详细信息,作为选择改进解决方案的第一部分。

\n