使用模块导入时Python多处理失败

时间:2019-09-30 16:28:15

标签: python multiprocessing python-multiprocessing

使用'spawn'方法时,我在python多重处理模块上苦苦挣扎。 如果我直接直接运行以下文件,则一切正常:

main_process.py:

import multiprocessing as _mp
import os
mp = _mp.get_context('spawn')

class Process(mp.Process):
    def __init__(self):
        super().__init__()
        print(os.getppid(), os.getpid(), "Init Process")

    def run(self):
        print(os.getppid(), os.getpid(), "Hello World!")


def main_function():
    print(os.getppid(), os.getpid(), 'main')
    process_1 = Process()
    process_1.start()
    process_1.join()

if __name__ == "__main__":
    main_function()

我得到预期的输出:

23337 25062 main
23337 25062 Init Process
25062 25067 Hello World!

另一方面,我从另一个文件导入main_function()并尝试像这样运行它

from main_process import main_function
main_function()

我得到以下输出:

23337 25104 main
23337 25104 Init Process
25104 25106 main
25104 25106 Init Process
RuntimeError: ...

看起来创建的Process实例将再次重新运行main_function(),即使该实例仅应运行其run()函数的主体,或者至少是我想要的期望。 使用“ fork”方法开始该过程,即可按预期工作。

为什么会发生这种情况,我该怎么做才能阻止它发生?

0 个答案:

没有答案