Python中的生产者/消费者多线程
一个典型的生产者-消费者问题在Python中可以这样解决:
from queue import Queue
job_queue = Queue(maxsize=10)
def manager():
while i_have_some_job_do:
job = get_data_from_somewhere()
job_queue.put(job) #blocks only if queue is currently full
def worker():
while True:
data = job_queue.get() # blocks until data available
#get things done
但是我有一个变种的生产者/消费者问题(严格来说不算,所以我称它为管理者-工作者):
管理者把一些工作放进一个队列里,而工作者则需要不断地从队列中获取工作并完成它们。不过,当工作者获取到一个工作时,并不会把这个工作从队列中移除(和Queue.get()
不一样)。只有管理者才能从队列中移除工作。
那么,工作者是如何获取工作而又不把工作从队列中移除的呢?也许get
和put
可以用吗?
管理者又是如何从队列中移除特定的工作呢?
1 个回答
2
也许你的工作不能完全消除任务,但可以考虑把它们从原来的队列移动到一个不同的“任务完成”队列。这个移动过程应该是简单又快速的,然后管理者可以处理这个“任务完成”队列,删除那些他认为已经完成的任务,把其他的任务再移回工作队列。