从
multiprocessing
programming guidelines
。
显式地将资源传递给子进程
。。。最好将对象作为参数传递给子进程的构造函数。
除了使代码(可能)与Windows兼容之外。。。
在Windows上,需要将共享对象传递给
Process
构造函数参数列表。否则,子进程将获得一个全新的副本,而不是父进程的副本。这就是为什么
f(1)
挂断,它正在等待另一个
Event
对象
只需像这样更改代码。
def f(n, event):
if n == 1:
print("starting")
event.wait()
print("Done!")
elif n == 2:
time.sleep(3)
event.set()
print("setting")
if __name__ == "__main__":
event = Event() # one instance of Event only
p1 = Process(target = f, args = (1, event))
p2 = Process(target = f, args = (2, event))
p1.start()
p2.start()
p1.join()
p2.join()