如何检查队列是否为空?运行以下代码:
from multiprocessing import Queue
q = Queue()
print(q.empty())
q.put("a")
print(q.empty())
呈现:
True
True
添加元素后 q.empty()
是否应该返回 False
?
最佳答案
两种可能的解决方案:
- 使用
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())
- 或者就像@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.Queue
或queues.SimpleQueue
。
关于python - 队列空方法坏了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63420388/