ホームページ  >  記事  >  バックエンド開発  >  Pythonのコルーチン(コルーチン)

Pythonのコルーチン(コルーチン)

黄舟
黄舟オリジナル
2017-01-19 17:19:241661ブラウズ

コルーチン: 入力パラメータを処理できるタスクとして関数を記述します
yield ステートメントを使用し、式 yield の形式でコルーチンを作成します
#Matcher case:

def print_info(data):  
   print('Looking for',data);  
   while True:  
     line = (yield)  
     if data in line:  
       print(line);

上記の関数はコルーチン プログラムです この関数を使用します。まず、これを呼び出して、最初の yield ステートメントまで実行する必要があります

info = print_info('python');  
info.__next__();  #向前执行第一条yield语句

出力結果:
Python を探しています

次に、send メソッドを使用して、処理のためにデータをコルーチンに送信します

info.send('Hell world');   
info.send('this is python');   
info.send('python goods');

データが送信された場合データパラメータの値が含まれています。その後、マッチングが成功し、データが返されます
出力結果:
Pythonを探しています
これはPythonです
Pythonグッズです
send()がコルーチンに値を送信すると、プログラムは一時的に中断されます。値が送信されると、yield 式はこの値を返し、プログラムは次の式が見つかるまで戻り値を処理します。このプロセスは、コルーチン関数が返されるか、データに基づいて生成される close メソッドが呼び出されるまで実行され続けます。プログラムの一部はプログラムの別の部分によって使用されます (プロデューサー/コンシューマー パターン)。並行プログラムを作成する場合、コルーチンの役割は明らかです。データのユーザーを表します。

info =[  
    print_info('python'),  
    print_info('hello'),  
    print_info('chunrui')  
]

__next__() を呼び出してすべてのマッチャーを準備します。

for n in info:  
  n.__next__();

ファイル内のデータの各列を取得してジェネレーターに渡す関数を定義しますプロセッサ

def tail(f):  
   for line in f :  
     if not line:  
       time.sleep(0.1);  
       continue; #如果不存在 则推迟0.1s 进行下一次  
     yield line;  
myList = tail(open('E:/work.txt'))

はmyList内の値をループし、それをコルーチンプログラムに送信します

for m in myList:  
  for n in info:  
    n.send(m);

出力結果:

Looking for python
Looking for hello
Looking for chunrui
python is conputer language
chunrui is name
hello world is the first case
I like to use python
my name is chunrui

概要:

1. コルーチン: コルーチンが一時停止されているときに、コルーチンは入力パラメーターのタスク関数を処理できます。呼び出しがプログラムに戻ると、追加または新しいものを渡すことができます。パラメータを追加して、前回中断したところから続行できます


2. send 関数を使用してパラメータをコルーチンに送信します


上記はコルーチン (coroutine) の内容に注意してください。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) にアクセスしてください。

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