使用'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”方法开始该过程,即可按预期工作。
为什么会发生这种情况,我该怎么做才能阻止它发生?