生产者和消费者如何优雅地退出?

时间:2013-02-21 20:10:19

标签: python multithreading producer-consumer

我的任务是提高制作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。我的意思是'优雅'是我希望消费者不会做任何额外的工作,因为制作人告诉他没有更多的商品可以生产。

1 个答案:

答案 0 :(得分:3)

生产者可以向队列中发送一个特殊的“毒丸”对象,作为一个信号,表明不会有更多的数据进入,消费者应该关闭。显然,消费者必须知道毒丸(使其成为一个全球常量的东西)并注意它,并正确处理它。

这是处理这种情况的常见模式。