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