我的任务是提高制作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种商品,必须有某种方式通知消费者生产者不会生产任何东西,你应该退出。
任何建议都会有所帮助。非常感谢。
PS。我的意思是'优雅'是我希望消费者不会做任何额外的工作,因为制作人告诉他没有更多的商品可以生产。
答案 0 :(得分:3)
生产者可以向队列中发送一个特殊的“毒丸”对象,作为一个信号,表明不会有更多的数据进入,消费者应该关闭。显然,消费者必须知道毒丸(使其成为一个全球常量的东西)并注意它,并正确处理它。
这是处理这种情况的常见模式。