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 に答える