Python中的生产者/消费者多线程

4 投票
1 回答
1141 浏览
提问于 2025-04-17 12:37

一个典型的生产者-消费者问题在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()不一样)。只有管理者才能从队列中移除工作。

那么,工作者是如何获取工作而又不把工作从队列中移除的呢?也许getput可以用吗?

管理者又是如何从队列中移除特定的工作呢?

1 个回答

2

也许你的工作不能完全消除任务,但可以考虑把它们从原来的队列移动到一个不同的“任务完成”队列。这个移动过程应该是简单又快速的,然后管理者可以处理这个“任务完成”队列,删除那些他认为已经完成的任务,把其他的任务再移回工作队列。

撰写回答