Python多进程Event无法正常工作问题求助
解决multiprocessing Event无法正常工作的问题
看起来你写的这个测试脚本核心问题出在全局Event的使用方式上,尤其是在Windows系统下(Windows默认用spawn方式启动子进程)。
问题根源
在Windows中,multiprocessing的spawn模式会重新导入主模块,这意味着每个子进程都会重新创建一个独立的Event实例——也就是说,p1等待的Event和p2设置的Event根本不是同一个对象,自然没法实现进程间的同步。哪怕是在Linux/macOS的fork模式下,全局变量的写法也不够规范,跨平台兼容性差。
修复后的代码
把Event作为参数传递给子进程,让两个进程共享同一个Event对象,同时加上join()确保主进程等待子进程执行完毕:
import multiprocessing, time from multiprocessing import Process, Event def f(n, event): if n == 1: print("starting") event.wait() print("Done!") if n == 2: time.sleep(3) event.set() print("setting") if __name__ == "__main__": event = Event() # 放在main代码块内,避免子进程重复初始化 p1 = Process(target=f, args=(1, event)) p2 = Process(target=f, args=(2, event)) p1.start() p2.start() p1.join() p2.join()
额外提示
join()方法能保证主进程不会提前退出,确保子进程有足够时间完成任务;- 传递参数的写法是跨平台的,不管在Windows还是Linux/macOS下都能稳定运行。
内容的提问来源于stack exchange,提问作者Anish Shanbhag
相关产品推荐
相关产品推荐

