python - Python队列只有1个项目
问题描述
我只想存储一项(最新的)。我会这样做:
thread 1:
queue.queue.clear()
queue.put (DATA, block = False, timeout = 2)
thread 2:
queue.get()
但是如果线程 2 在线程 1 清空队列的同时得到呢?
第二种思路是get后立即清空线程2队列,但我不希望队列增长,不知道线程2不下载的时候是什么大小...
感谢帮助!
解决方案
您希望在清除队列和将新值放入队列之间阻止其他任何人访问队列。您可以使用锁来完成此操作。
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
都会阻塞,直到队列被更新并且锁被释放。
推荐阅读
- ios - 世博弹出后我可以使用世博相机吗
- linux-kernel - 从另一个驱动程序访问 PLIC 中断控制器的寄存器
- react-native - 使用 Expo 的 React Native 突然更改了登录用户
- c# - 在同一表单中使用复选框列表和文本框/html 输入的示例?
- python - 在 k-Fold 交叉验证中,是否为 Sklearn 中的每个折叠启动了一个新模型?
- linux - 如何计算文件中的每个字母?
- flask - 无法从 flask_migrate 导入 MigrateCommand
- python - Gstreamer 1.18 硬件解码时如何访问GPU数据
- transformer - 获得t5官方关卡
- next.js - 为什么客户端和服务器都调用 Next.js _app.js?