ホームページ  >  記事  >  バックエンド開発  >  Pythonジェネレータを使った生産者消費者モデルの実装方法の紹介

Pythonジェネレータを使った生産者消費者モデルの実装方法の紹介

高洛峰
高洛峰オリジナル
2017-03-22 09:38:081535ブラウズ

ジェネレーターのようなオブジェクトが存在しないと仮定すると、この単純な「プロデューサー/コンシューマー」モデルを実装するにはどうすればよいでしょうか? Iimport time

defProducer ():

Pro_List = []

for I in Range (10000):

Print "Bun %S to make ing" %(i)

time.sleep (0.5)

pro_list.append("Bun %s" %i)

アウト アウト オフアウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウトpro_list の buns" %(index, Staffed_bun)

pro_list =Producer()

consumer(pro_list)

上記の生産者と消費者モデルには、効率が非常に低いという深刻な問題があり、「本番」ではその過程で、消費者はパンがすべて生産されるまで待たなければならず、このモデルは非効率的で不合理です。

効率を向上させたい場合は、生産プロセスと消費プロセスを 2 つの独立したエンティティとし、生産と消費が「同時」に動作する必要があります。

インポート時間

def Consumer(name):

print '私は%sです、パンを食べる準備ができています'%(name)

while True:

stuffed_bun = yield

time.sleep(1)

S Print "%s は%s を食べるのがとても幸せです"%(name,stuffed_bun)

Def プロデューサー ():

P1 = 消費者 ("Suhaozhi")

P2 = 消費者 ("Ayumi")

p1.next () #次のメソッド実行後、無限ループが始まります

p2.next()

for i in range(10):

time.sleep(1)

p1.send("Baozi %s" % (i)) #send を通じて yield に値を割り当て、yield はその値をstuffed_bun

p2.send("Bun %s" %(i))

Producer()

以上がPythonジェネレータを使った生産者消費者モデルの実装方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。