0

我的任务是提高进行 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。我“优雅地”的意思是,一旦生产者告诉他没有更多的商品要生产,我希望消费者不会做任何额外的工作。

4

1 回答 1

3

生产者可以在队列中发送一个特殊的“毒丸”对象,作为没有更多数据到来并且消费者应该关闭的信号。显然,消费者必须了解毒丸(使其成为全球不变的事物)并注意它并正确处理它。

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

于 2013-02-21T20:24:57.433 回答