首页 > 解决方案 > Python队列只有1个项目

问题描述

我只想存储一项(最新的)。我会这样做:

thread 1:
queue.queue.clear()
queue.put (DATA, block = False, timeout = 2)

thread 2:
queue.get()

但是如果线程 2 在线程 1 清空队列的同时得到呢?

第二种思路是get后立即清空线程2队列,但我不希望队列增长,不知道线程2不下载的时候是什么大小...

感谢帮助!

标签: pythonmultithreading

解决方案


您希望在清除队列和将新值放入队列之间阻止其他任何人访问队列。您可以使用锁来完成此操作。

lock = threading.Lock()

def clear_and_put(queue):
    with lock.acquire():
        queue.clear()
        queue.put(DATA)

def get(queue):
    with lock.acquire():
        return queue.get()

如果 thread1 调用clear_and_put,它要么立即获得锁,要么等到 thread2 的调用get完成。一旦它获得锁,任何调用get都会阻塞,直到队列被更新并且锁被释放。


推荐阅读