问题是消费者永远不会退出,它只是无所事事。该代码旨在以这样的方式工作:蟒蛇多处理自给式消费锁永远
创建队列并将某个task_data传递给它。指定数量的消费者被创建来处理数据。当消费者发现队列为空时,由于其他消费者仍有可能将某些东西放入队列中,所以它不能离开,但它可以在consumers_finished
列表中指示它没有作业。消费者循环继续,直到每个工人都表示他们完成了工作。目前还不知道会有多少工作,因为消费者会将任务放入队列中。我读了一些关于这方面的内容,但不清楚如果进程自己养活,进程是否会永远等待。
class Consumer(multiprocessing.Process):
def __init__(self, task_queue, results, consumers_finished):
multiprocessing.Process.__init__(self)
self.task_queue = task_queue
self.results = results
self.consumers_finished = consumers_finished
def run(self):
while not all(flag for flag in self.consumers_finished.values()):
task_data = self.task_queue.get()
if not task_data:
self.consumers_finished[self.name] = True
continue
self.consumers_finished[self.name] = False
task_result = self.do_some_processing(task_data)
self.task_queue.put(task_result)
class Starter(object):
def start(self):
manager = multiprocessing.Manager()
task_queue = multiprocessing.Queue()
results = manager.list()
consumers_finished = manager.dict()
consumers = [Consumer(task_queue, results, consumers_finished) for i in range(self.consumers_count)]
for consumer in consumers:
consumers_finished[consumer.name] = False
consumer.start()
task_queue.put(task_data)
for consumer in consumers: consumer.join()
return results
相关:http://stackoverflow.com/questions/19071529/python-multiprocessing-125-list-never-finishes –