コルーチン、特に python について少し読んだことがありますが、完全には明らかではありません。
私は生産者/消費者モデルを実装しました。その基本的なバージョンは次のとおりです。
#!/usr/bin/env python
class MyConsumer(object):
def __init__(self, name):
self.__name = name
def __call__(self, data):
return self.observer(data)
def observer(self, data):
print self.__name + ': ' + str(data)
class MyProducer(object):
def __init__(self):
self.__observers = []
self.__counter = 0
def add_observer(self, observer):
self.__observers.append(observer)
def run(self):
while self.__counter < 10:
for each_observer in self.__observers:
each_observer(self.__counter)
self.__counter += 1
def main():
consumer_one = MyConsumer('consumer one')
consumer_two = MyConsumer('consumer two')
producer = MyProducer()
producer.add_observer(consumer_one)
producer.add_observer(consumer_two)
# run
producer.run()
if __name__ == "__main__":
main()
明らかに、MyConsumer にはプロデュース用のルーチンもある可能性があるため、データ パイプラインを簡単に構築できます。これを実際に実装したので、消費者/生産者モデルのロジックを実装する基本クラスが定義され、子クラスで上書きされる単一の処理関数が実装されます。これにより、簡単に定義され分離された処理要素を使用して、データ パイプラインを簡単に作成できます。
これは、よく引用されるチュートリアルhttp://www.dabeaz.com/coroutines/index.htmlなど、コルーチン用に提示される種類のアプリケーションの典型であるように私には思えます。残念ながら、上記の実装に対するコルーチンの利点は明らかではありません。呼び出し可能なオブジェクトの扱いが難しい言語では、得られるものがあることがわかりますが、python の場合、これは問題にならないようです。
誰かが私のためにこれに光を当てることができますか? ありがとう。
編集: 申し訳ありませんが、上記のコードのプロデューサーは 0 から 9 までカウントし、コンシューマーに通知します。コンシューマーは名前とカウント値を出力します。