Les coroutines sont un moyen de développer du code d'E/S asynchrone dans Tornado. La coroutine utilise le mot-clé Python rendement pour suspendre et reprendre l'exécution de l'appelant. Ainsi, avant d'en apprendre davantage sur les coroutines, nous devons d'abord nous familiariser avec le concept et l'utilisation de rendement. Pour comprendre le rendement, nous devons d'abord comprendre le concept d'itérateurs.
En Python, les itérateurs définis à l'aide du mot-clé rendement sont également appelés [générateurs]Le scénario le plus couramment utilisé pour les itérateurs en Python est l'instruction de boucle for, qui encapsule une collection avec un itérateur et accède aux éléments de la collection pour exécuter la boucle.
Par exemple :
for number in range(5):#range返回一个列表 print(number)
Le range() renvoie une collection contenant les éléments spécifiés, et l'instruction for l'encapsule dans un itérateur et y accède à l'aide de iter(). les ensembles sont convertis en itérateurs, par exemple :
numbers=[1,2,3,4,5] #t就是迭代器 t=iter(numbers) #打印t对象,以便查看其类型 print(t)
Résultat renvoyé :
<list_iterator object at 0x10e805748>
Par rapport aux objets Python ordinaires, les itérateurs ont une méthode __next__()
supplémentaire, appelant à chaque fois cette méthode peut renvoyer un élément et l'appelant (comme une instruction for) peut accéder aux éléments de la collection en appelant continuellement la méthode __next__()
.
Par exemple :
numbers=[1,2,3,4,5] #t就是迭代器 t=iter(numbers) #打印t对象,以便查看其类型 print(t.__next__()) print(t.__next__()) print(t.__next__()) print(t.__next__())
Résultat renvoyé :
1 2 3 4
L'appelant peut continuer à appeler la méthode __next__()
jusqu'à ce que l'exception StopIteration soit renvoyée.
Les itérateurs sont largement utilisés dans la programmation Python, alors comment les développeurs personnalisent-ils leurs propres itérateurs ?
La réponse est d'utiliser le mot-clé rendement.
L'appel de toute fonction définie contenant le mot-clé rendement n'exécutera pas la fonction, mais obtiendra un itérateur correspondant à la fonction.
Exemple :
import time def demoIternator(): print("---1---") yield 1 print("---2---") yield 2 print("---3---") yield 3 print("---4---") for x in demoIternator(): print(x) time.sleep(1)
Chaque fois que la méthode __next__() de l'itérateur est appelée, la fonction itérateur sera exécutée et le résultat de rendement sera renvoyé comme itération élément de retour.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!