Maison  >  Article  >  développement back-end  >  Coroutines (coroutines) en python

Coroutines (coroutines) en python

黄舟
黄舟original
2017-01-19 17:19:241661parcourir

Coroutine : écrivez la fonction comme une tâche pouvant traiter les paramètres d'entrée
Utilisez l'instruction rendement et créez une coroutine sous la forme de l'expression rendement
# Cas Matcher :

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

La fonction ci-dessus est un programme coroutine. Pour utiliser cette fonction, vous devez d'abord l'appeler et l'exécuter jusqu'à la première instruction de rendement

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

Résultat de sortie :
Recherche de python

Ensuite, utilisez la méthode d'envoi pour envoyer les données à la coroutine pour traitement

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

Si les données envoyées contiennent la valeur du paramètre de données, la correspondance réussira et les données seront renvoyées
Résultat de sortie :
Recherche de python
c'est python
produits python
Lorsque send() envoie une valeur à la coroutine, le programme est temporairement suspendu. Après l'envoi de la valeur, l'expression de rendement renverra cette valeur. .Le programme suivant traitera la valeur de retour jusqu'à ce qu'il rencontre L'expression suivante se termine et ce processus continuera à s'exécuter jusqu'au retour de la fonction coroutine ou jusqu'à ce que la méthode close soit appelée
Les données générées sur la base d'une partie du programme seront utilisées. par une autre partie du programme (mode producteur-consommateur)
Lors de l'écriture de programmes concurrents, le rôle de la coroutine est évident Elle représente un utilisateur de données

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

prépare tous les matchers en appelant __next__(. )

for n in info:  
  n.__next__();

définit une fonction pour obtenir le fichier Chaque colonne de données est transmise au générateur

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'))

parcourt les valeurs de maListe et puis envoyé au programme coroutine

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

Résultat de sortie :

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

Résumé :
1. Coroutine : La coroutine peut traiter la fonction de tâche de. les paramètres d'entrée. Lorsque la coroutine est en pause, nous en obtenons la valeur de retour et pouvons la transmettre lorsque l'appel est renvoyé au programme. Vous pouvez toujours continuer là où vous vous êtes arrêté en ajoutant des paramètres supplémentaires ou nouveaux
2. Utilisez la fonction d'envoi pour envoyer des paramètres à la coroutine

Ce qui précède est la coroutine (coroutine) en python), veuillez faire attention au site Web PHP chinois (www.php.cn) pour plus de contenu connexe !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:objets en pythonArticle suivant:objets en python