如何优雅地退出生产者和消费者?
我的任务是提高RPC调用的效率。我想我可以用生产者和消费者的例子来实现。生产者会获取响应,而消费者则会把收到的对象写入文件。
我写了一个关于生产者和消费者问题的示例程序,效果不错。不过,我有个问题,就是消费者怎么知道什么时候该退出呢?
这是我的代码:
5 is_exit = False
6 product = []
7
8 def consumer(cond):
9 global product
10 global is_exit
11
12 while True:
13 cond.acquire()
14 while len(product) == 0:
15 cond.wait()
16 product = product[1:]
17 print 'consume one product'
18 cond.release()
19
20 def producer(cond):
21 global product
22 global is_exit
23
24 for i in range(10):
25 cond.acquire()
26 print 'produce one good'
27 product.append(199)
28 cond.notify()
29 cond.release()
/// I use .join() to wait all threads to finish.
因为生产者只会生产10个商品,所以一定要有某种方式通知消费者,生产者不会再生产任何东西了,这样消费者就可以退出。
任何建议都会很有帮助。非常感谢。
附注:我所说的“优雅地”是指我希望消费者在生产者告诉他没有更多商品可以生产时,立刻停止任何额外的工作。
1 个回答
3
生产者可以发送一个特殊的“毒丸”对象到队列里,这个对象是用来告诉消费者不再有数据来了,消费者应该关闭了。显然,消费者需要知道这个毒丸是什么(可以把它设定为一个全局常量),并且要留意这个毒丸,正确地处理它。
这是处理这种情况的一个常见方法。