从
multiprocessing编程指南。
明确地将资源传递给子进程
…最好将对象作为参数传递给子进程的构造函数。
除了使代码(潜在地)与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()


