3
多线程一个典型的生产者 - 消费者问题是在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
可以吗?
经理如何从队列中移除特定工作?
更多关于读者作家。 – UmNyobe 2012-02-08 23:47:25
这非常混乱。如果消费者线程不删除作业,如果有多个消费者线程,则会出现问题。即使只有一个消费者线程,也必须阻止其从队列中弹出另一个作业,直到管理器弹出前一个作业。您将不得不通知管理人员删除已完成的工作(您没有指出管理人员通常会等待什么,所以我不知道该怎么做),还要向经理提供一些信号以表明消费者是在继续之前等待。你真的不得不做这个讨厌的事情吗? – 2012-02-08 23:56:23
@MartinJames这不是那么讨厌。只有一个消费者存在。工人不需要通知管理员任何事情。经理会以其他方式收到通知。我要找的东西可以让工作人员睡眠直到新工作来临。但python文件似乎暗示没有办法这样做。对不起,我英文很差。 – onemach 2012-02-09 12:59:42