multiprocessing.Queue 您所在的位置:网站首页 多进程访问共享内存吗 multiprocessing.Queue

multiprocessing.Queue

2024-07-16 13:42| 来源: 网络整理| 查看: 265

一、介绍

multiprocessing.Queue() 是 Python 中 multiprocessing 模块中的一个类,用于在多个进程之间进行通信和数据交换。它可以在多个进程之间安全地传递消息和数据,是一种线程安全的队列实现。

在使用 multiprocessing.Queue() 时,需要注意避免在多个进程之间传递可变对象(如列表、字典等),因为这可能会导致意外的行为。最好传递不可变对象(如整数、字符串等)或使用 multiprocessing.Manager 来创建共享数据结构。

multiprocess.Queue() 是跨进程通信队列,不能用于multiprocessing.Pool多进程的通信。

进程池 multiprocessing.Pool() 的多进程之间的通信要用 multiprocessing.Manager().Queue()

二、函数介绍 参数 def __init__(self, maxsize=0, *, ctx)

maxsize:是队列中允许的最大项数。如果省略此参数,则无大小限制。

方法

  put(item[, block[, timeout]]):将 item 放入队列。

  put_nowait():同 put()。

  get([block[, timeout]]):从队列中取出一个元素。

  get_nowait():同 get()。

  注意:当一个队列为空的时候如果再用get取则会堵塞,所以取队列的时候一般是用到

  get_nowait()方法,这种方法在向一个空队列取值的时候会抛一个Empty异常

  所以更常用的方法是先判断一个队列是否为空,如果不为空则取值。

  qsize():返回队列中当前的元素数量。

  empty():如果队列为空则返回 True,否则返回 False。

  full():如果队列已满则返回 True,否则返回 False。

  close():关闭队列,表示不再向队列中添加数据。

  join_thread():等待队列中的所有数据被处理完。

  cancel_join_thread():取消队列中的所有数据被处理完。

三、代码测试 测试代码1 # -*- coding:utf-8 -*- # @author: 木子川 # @微信公众号: AI算法与电子竞赛 # @Email: [email protected] # @VX:fylaicai import multiprocessing import time def producer(data): while True: for i in range(10): i += 1 data.put(i) time.sleep(1) def consumer(data): while True: result = data.get() print("接收到的数据为:", result) if __name__ == "__main__": data = multiprocessing.Queue() Producer = multiprocessing.Process(target=producer, args=(data, )) Producer.start() Consumer = multiprocessing.Process(target=consumer, args=(data, )) Consumer.start() 测试代码2 # -*- coding:utf-8 -*- # @author: 木子川 # @微信公众号: AI算法与电子竞赛 # @Email: [email protected] # @VX:fylaicai from multiprocessing import Process, Queue import time, random, os def consumer(q): while True: res = q.get() # 收到结束信号则结束 if res is None: break time.sleep(random.randint(1, 3)) print(f'消费者:{os.getpid()},{res}') def producer(q): for i in range(2): time.sleep(random.randint(1, 3)) q.put(i) print(f'生产者: {os.getpid()}, {i}') if __name__ == '__main__': q = Queue() # 生产者们 p1 = Process(target=producer, args=(q,)) # 消费者们 c1 = Process(target=consumer, args=(q,)) p1.start() c1.start() p1.join() # 发送结束信号 q.put(None) print('生产者们完成!') 四、书籍推荐

“周志华老师的《机器学习》(西瓜书)是机器学习领域的经典入门教材之一,周老师为了使尽可能多的读者通过西瓜书对机器学习有所了解, 所以在书中对部分公式的推导细节没有详述,但是这对那些想深究公式推导细节的读者来说可能“不太友好”,本书旨在对西瓜书里比较难理解的公式加以解析,以及对部分公式补充具体的推导细节。”

并且本书还有配套的视频讲解,通过书籍和视频一起来加深公式理解。

关注下方公众号:@AI算法与电子竞赛,回复关键字 “PDF” 获取下载地址。

multiprocessing.Queue --- 从队列通信中直接访问的共享内存(2)

五、链接作者

欢迎关注我的公众号:@AI算法与电子竞赛

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有