Coroutines (coroutines) en python

黄舟
Libérer: 2017-01-19 17:19:24
original
1641 Les gens l'ont consulté

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);
Copier après la connexion

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语句
Copier après la connexion

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');
Copier après la connexion

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')  
]
Copier après la connexion

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

for n in info:  
  n.__next__();
Copier après la connexion

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'))
Copier après la connexion

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

for m in myList:  
  for n in info:  
    n.send(m);
Copier après la connexion

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
Copier après la connexion

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 !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!