Python多进程中Queue队列元素无法被子进程获取问题
问题原因及解决方法
问题根源:你用的
queue.Queue是线程间通信专用的队列,不支持跨进程共享数据。多进程启动后,子进程会复制主进程的内存空间,传入的队列实际是子进程自己的独立副本,和主进程的队列完全没关系。主进程往自己的队列塞元素,子进程的队列始终是空的,所以qsize()一直显示0。解决方法:替换成
multiprocessing.Queue,这是专门为多进程通信设计的队列,底层通过管道和锁机制实现进程间的数据传递。
修改后的代码:
from multiprocessing import Process, Queue # 导入多进程专用的Queue from time import sleep def x(q): while True: print(q.qsize()) sleep(1) q = Queue() p = Process(target=x, args=(q,)) p.start() while True: sleep(1) q.put(1)
补充说明:
multiprocessing.Queue的qsize()返回值不一定绝对准确,因为调用方法和实际操作队列之间,可能有其他进程修改队列状态。- 如果需要更严谨的进程同步逻辑,可以配合
multiprocessing.Lock,或者使用JoinableQueue处理任务完成后的通知。
内容的提问来源于stack exchange,提问作者RichardS
相关产品推荐
相关产品推荐

