Python 中的队列与 JoinableQueue

2024-01-27

在Python中使用多处理模块时有两种队列:

  • Queue
  • 可连接队列。

它们之间有什么区别?

Queue

from multiprocessing import Queue
q = Queue()
q.put(item) # Put an item on the queue
item = q.get() # Get an item from the queue

可连接队列

from multiprocessing import JoinableQueue
q = JoinableQueue()
q.task_done() # Signal task completion
q.join() # Wait for completion

JoinableQueue https://docs.python.org/2/library/multiprocessing.html#multiprocessing.JoinableQueue有方法join() and task_done(), which Queue https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Queue hasn't.


类 multiprocessing.Queue( [maxsize] )

返回使用管道和一些锁/信号量实现的进程共享队列。当进程第一次将项目放入队列时,将启动供给线程,将对象从缓冲区传输到管道中。

标准库的 Queue 模块中常见的 Queue.Empty 和 Queue.Full 异常会引发信号超时。

Queue 实现了 Queue.Queue 中除 task_done() 和 join() 之外的所有方法。


类 multiprocessing.JoinableQueue( [maxsize] )

JoinableQueue 是 Queue 的子类,是一个另外具有 task_done() 和 join() 方法的队列。

任务完成()

指示先前排队的任务已完成。由队列消费者线程使用。对于用于获取任务的每个 get(),随后对 task_done() 的调用会告诉队列该任务的处理已完成。

如果 join() 当前处于阻塞状态,它将在处理完所有项目后恢复(这意味着对于已 put() 到队列中的每个项目都会收到一个 task_done() 调用)。

如果调用次数多于队列中放置的项目数,则会引发 ValueError。

join()

阻塞直到队列中的所有项目都已被获取并处理。

每当将项目添加到队列中时,未完成任务的计数就会增加。每当消费者线程调用task_done()以指示该项目已被检索并且其上的所有工作都已完成时,计数就会减少。当未完成任务的计数降至零时, join() 解除阻塞。


如果你使用JoinableQueue那么你必须打电话JoinableQueue.task_done()对于从队列中删除的每个任务,否则用于计算未完成任务数量的信号量最终可能会溢出,引发异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的队列与 JoinableQueue 的相关文章

随机推荐

  • 为什么带有 pop 方法(或 del 语句)的 for 循环不迭代所有列表元素[重复]

    这个问题在这里已经有答案了 我是 Python 新手 正在尝试使用列表 我在 linux2 上使用 Python 3 2 3 默认 2012 年 10 月 19 日 20 13 42 GCC 4 6 3 这是我的示例代码 gt gt gt
  • 确保 C# 中静态方法的线程安全

    我目前在静态类 方法中有一些代码 但我想检查它是否是线程安全的 从我读到的内容来看 我认为这应该没问题 但我内心深处的某些想法告诉我 这可能不是 我的网页的数据处理阶段使用外部 Web 服务来创建订单记录 这可能会非常慢 可能需要 30 4
  • AngularJS TypeScript 指令链接函数

    我正在尝试使用 TypeScript 创建 AngularJS 指令 我的指令需要 ngModel 并且我还使用在指令中注入的自定义服务 我的主要问题是我的服务无法在链接功能中使用 这是我想要实现的目标的示例 module app dire
  • 当启用 wifi 并且 WifiManager.EXTRA_WIFI_STATE 不可用时,android.net.wifi.STATE_CHANGE 不会广播

    显现
  • 在swift中下载并解析json

    我正在尝试从网站获取 JSON 并解析它 然后再将其放入 iOS 视图中 这是我的代码 func startConnection let urlPath String http binaenaleyh net dusor var url N
  • C# WebClient 非英文请求标头值编码

    我想将一些自定义标头添加到网络请求的标头中 我通过 WebClient Headers Add Header Value 方法来执行此操作 ASCII 字符没有问题 但非 ASCII 字符有问题 是否可以改变 标头编码值 None
  • xtable 用于条件单元格格式表的显着 p 值

    我正在使用 xtable 生成要放入 Latex 中的表格 并且想知道是否有一种方法可以对单元格进行条件格式设置 以便所有重要的 p 值都呈灰色 我在 TexShop 中使用 Knit 这是一个使用的示例diamondsggplot2 中的
  • 在 iPhone 上向屏幕外的 FBO 写入然后读取;在模拟器上有效但在设备上无效?

    我正在尝试在 iPhone 上进行一些图像处理 基于 Apple 的 GLImageProcessing 示例 最终我想做的是将图像加载到纹理中 执行示例代码中的一项或多项操作 色调 饱和度 亮度等 然后读回生成的图像以供以后处理 保存 在
  • Spring测试@ContextConfiguration和静态上下文

    我的抽象测试类有以下代码 我知道XmlBeanFactory with ClassPathResource已弃用 但这不太可能是问题所在 RunWith SpringJUnit4ClassRunner class ContextConfig
  • 如何使用 pyplot 使一个轴占据多个子图

    我想在一个图中包含三个图 该图应具有二乘二的子图布局 其中第一个图应占据前两个子图单元格 即整个第一行图单元格 其他图应位于单元格 3 和 4 中第一个图的下方 我知道 MATLAB 通过使用subplot像这样命令 subplot 2 2
  • 从 TIFF 文件中提取 JPEG

    背景我有一个大的 TIFF 文件 它是用 JPEG 压缩的 TIFF 标准中的新压缩率为 7 并且是平铺的 我需要做的是将这些图块提取到单独的 jpg 文件中 我需要能够在不解压缩 重新压缩图像数据的情况下完成此操作 因为这将需要太多的计算
  • 找不到有效的 GoogleService-info.plist

    FIRApp configure FirebaseApp configure in Swift could not find a valid GoogleService Info plist in your project Please d
  • Java Guava Multimap和Cache的结合

    有没有番石榴的组合之类的东西Cache and Multimap功能可用吗 本质上 我需要一个集合 其中条目在给定时间后过期 例如Cache但我有非唯一的密钥 并且我需要条目独立过期 我认为路易斯 沃瑟曼在上面的评论之一中提供了答案 即没有
  • 如何在CSS中修剪图像?

    好的 问题是 我的应用程序允许用户插入任何图像 由他们决定插入很大或很长的图像 但是当我租用图像时我想要width 50px and height 100px 好吧 如果我这样做的话 myImage width 50px height 10
  • 更改 GKE 上 LoadBalancer 的 IP 地址

    我想更改 Google Cloud 中 LoadBalancer ingress nginx controller 的 IP 地址 我现在已经通过 LoadBalancer 分配了 IP 地址 请参阅屏幕截图 不幸的是 它没有在 GKE 中
  • bash 从函数内部退出脚本

    在某些情况下 您希望从函数内部终止脚本 function die if fatal fatal
  • Javascript - 使用 iframe-in 值填充输入

    我想用我的 iframe in 值填充输入 我有两个html文件 1 html 和 2 html第一个 1 html 是这样的
  • 确定给定名称的类是否存在

    这可能是一个愚蠢的问题 但我四处搜寻却一无所获 我有一个代码 class A let className A 我需要检查是否className对应于现有的类 这一切都不在全局范围内 并且在 node js 中运行 所以我无法使用window
  • 在 C++ 中修改 const int [重复]

    这个问题在这里已经有答案了 运行下面的代码显示 x ptr 那么为什么x和 ptr不相等呢 const int x 10 int ptr int x ptr ptr 1 cout lt lt x lt lt lt lt x lt lt lt
  • Python 中的队列与 JoinableQueue

    在Python中使用多处理模块时有两种队列 Queue 可连接队列 它们之间有什么区别 Queue from multiprocessing import Queue q Queue q put item Put an item on th