Python队列仅1项
我只想储存一件物品(最新的)。我会这样做:Python队列仅1项,python,multithreading,Python,Multithreading,我只想储存一件物品(最新的)。我会这样做: thread 1: queue.queue.clear() queue.put (DATA, block = False, timeout = 2) thread 2: queue.get() 但是,如果线程2在线程1清除队列时同时获取,该怎么办 第二个想法是在获取后立即清除线程2队列,但我不希望队列增长,不知道线程2不下载时的大小 谢谢你的帮助 您希望在清除队列和将新值放入队列之间阻止其他任何人访问队列。您可以使用锁来完成此操作 lock = t
thread 1:
queue.queue.clear()
queue.put (DATA, block = False, timeout = 2)
thread 2:
queue.get()
但是,如果线程2在线程1清除队列时同时获取,该怎么办
第二个想法是在获取后立即清除线程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\u和\u put
,它将立即获得锁,或者等待thread2调用get
完成。一旦它获得了锁,任何对get
的调用都将被阻塞,直到队列被更新并且锁被释放。旁白:()
之前的空间是什么?在任何情况下,都很难理解您所询问的内容的上下文,无论是线程2在清除之前的任何时间(甚至在清除之前)获取以前存储的项,还是在将其放入队列之后获取新项。这不能同时发生。我只想在队列中放置一个项目。解决方案是清除并放置单个原子操作,这样thread2对get
的调用就不会在清除和放置之间发生。在thread1调用clear
之前,thread2调用get
,或者在thread1调用put
之后,thread2调用get
。第三个选项(get在clear和put之间调用)是不允许的。True,只要只有一个生产者线程就可以。