python - 队列空方法坏了吗?

标签 python python-multiprocessing

如何检查队列是否为空?运行以下代码:

from multiprocessing import Queue

q = Queue()
print(q.empty())

q.put("a")
print(q.empty())

呈现:

True
True

添加元素后 q.empty() 是否应该返回 False

最佳答案

两种可能的解决方案:

  1. 使用 queue.Queue 而不是 multiprocessing.Queue: 一些differences in doc他们之间:

They differ in that Queue lacks the task_done() and join() methods introduced into Python 2.5's queue.Queue class.

from queue import Queue
q = Queue()
print(q.empty())
q.put("a")
print(q.empty())
  1. 或者就像@Hans Musgrave 在评论中所说的那样。不能保证time.sleep(1)。您可以改用time.sleep(0):<
from multiprocessing import Queue
import time
q = Queue()
print(q.empty())
time.sleep(0)
q.put("a")
print(q.empty())

他们都给我:

True
False

关于 sleep(0) 的原因,零值会导致线程将其剩余时间片放弃给任何其他准备运行的线程。如果没有其他线程准备运行,函数立即返回,线程继续执行 cpu放弃资源,去执行q.emety()任务。我是这么想的。

稳定的方法是使用queue.Queuequeues.SimpleQueue

关于python - 队列空方法坏了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63420388/

相关文章:

python - 如何从 multiprocessing.queue 中的 Process 释放内存?

python - Python 中类似 MATLAB 的结构

python - 如何使用行数和列名从 CSV 文件调用组件

python - 在Python中绘制一个特定的函数

python - 为什么 Python Multiprocessing Workers 不会死?

Python 多处理 : why are large chunksizes slower?

python - 按字典中元组的元素组织?

基于 Python 文本的游戏装备护甲统计

python - 如何等待所有进程结束

python - 使用 multiprocessing -Pool- 和 -sklearn-,代码运行但核心不显示任何工作