当前位置:首页>python>Python基础篇 - 多进程-进程间的通信

Python基础篇 - 多进程-进程间的通信

  • 2026-10-11 08:42:16
Python基础篇 - 多进程-进程间的通信
进程间的通信

在上次的文章Python基础篇 - 多进程-全局变量的隔离我们认识到进程间是互不共享数据的,每个进程就相当于独立的工厂,其全局变量互不共享。那么要让进程间得以通信,实现数据的共享,就要借助multiprocessing模块中的queue队列机制。

一. 进程通信multiprocessing.Queue()

multiprocessing.Queue()返回一个共享队列(先进先出)实例。当一个进程将一个对象放进队列中时,一个写入线程会启动并将对象从缓冲区写入管道中,其他进程可从该队列中读取数据。默认队列是无限大小的,可以通过maxsize参数限制。

import osimport randomimport timeimport multiprocessing# 间隔时间向队列queue中放入数据def func1(queue):    while True:        data = random.randint(1, 10)        queue.put(data)        print(f'进程{os.getpid()},放入了数据{data}')        time.sleep(0.5)# 从queue中取出数据def func2(queue):    while True:        result = queue.get()        print(f'进程{os.getpid()},取出了数据{result}')if __name__ == "__main__":    queue = multiprocessing.Queue() # 创建队列    p1 = multiprocessing.Process(target=func1, args=(queue,))    p2 = multiprocessing.Process(target=func2, args=(queue,))    p1.start()    p2.start()    p1.join()    p2.join()

二. 进程池间通信Manager().Queue()

  进程池间的进程通话,原理还是基于队列queue实现数据共享,只是需要从Manager对象调用API接口。

import osimport randomimport timeimport multiprocessing# 间隔时间向队列queue中放入数据def func1(queue):    while True:        data = random.randint(1, 10)        queue.put(data)        print(f'进程{os.getpid()},放入了数据{data}')        time.sleep(0.5) # 间隔0.5s# 从queue中取出数据def func2(queue):    while True:        result = queue.get()        print(f'进程{os.getpid()},取出了数据{result}')if __name__ == "__main__":    queue = multiprocessing.Manager().Queue() # 创建队列    pool = multiprocessing.Pool(2)  # 创建了大小为2的进程池    pool.apply_async(func1, (queue,))    pool.apply_async(func2, (queue,))    pool.close()    pool.join()

总结:今日我们学习了Python基础篇-多进程-进程间的通信。多进程间的数据相互隔离,无法直接共享变量,需借助队列实现数据交互。我们分别使用普通多进程队列与Manager管理队列,普通Queue适用于原生多进程,进程池场景必须使用Manager共享队列,保证跨进程数据安全读写,理解了多进程通信的底层隔离与共享原理。在Python基础篇,后续我们将持续学习Python基础知识,介绍各种算法,祝每一位study er学习愉快。

合集链接
这里是我滴合集内容链接,大家感兴趣就康康吧。
1. 人工智能进阶之路 - 机器学习篇
2. 人工智能进阶之路 - 深度学习篇
3. AI发展前点
4. 人工智能进阶之路-Python基础篇
5. 充电er的乱坠闲聊
6. Origin认知
点个 赞 你最好看

最新文章

随机文章