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

0 投票
1 回答
758 浏览
提问于 2025-04-17 16:41

我的任务是提高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

生产者可以发送一个特殊的“毒丸”对象到队列里,这个对象是用来告诉消费者不再有数据来了,消费者应该关闭了。显然,消费者需要知道这个毒丸是什么(可以把它设定为一个全局常量),并且要留意这个毒丸,正确地处理它。

这是处理这种情况的一个常见方法。

撰写回答