考虑以下最小程序:
#!/usr/bin/env python3
import time
from multiprocessing import Process
def mp_test():
time.sleep(3)
print('mp_test')
print('start')
p = Process(target=mp_test)
p.run()
print('end')
根据我对documentation for the multiprocessing
module的理解,这段代码应该在一个单独的进程中执行mp_test()
,这意味着它应该与主进程并行执行。因此,我期待以下输出:
start
end
mp_test
但是,我得到的实际输出是:
start
mp_test
end
这是为什么?为了得到我期待的结果,我需要做出哪些改变?
答案 0 :(得分:3)
尝试使用p.start()
代替p.run()
。
答案 1 :(得分:2)
根据文件:
在多处理中,通过创建Process对象然后调用其start()方法来生成进程。
所以看起来你应该调用p.start()
,然后在一个单独的线程中调用p.run()
,这应该会得到你想要的结果。
直接调用p.run()
会跳过整个多线程位。