2013-02-21 52 views
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。我的意思是「優雅」,就是我希望消費者只要生產商告訴他沒有更多的產品可以生產就不會做任何額外的工作。

回答

3

生產者可以向隊列中發送一個特殊的「毒丸」對象,作爲沒有更多數據來臨並且消費者應該關閉的信號。顯然,消費者必須知道毒丸(讓它成爲一個全球常數的東西),然後注意並正確處理。

這是處理這種場景的常見模式。