Réponse courte:
yield from
est une ancienne d'attendre pour coroutine.
await
est une façon moderne d'attendre la coroutine.
réponse détaillée:
python a des générateurs - type particulier de fonctions qui produit une séquence de résultats au lieu d'une seule valeur. À partir de Python 3.3 yield from
expression a été ajoutée. Il allows un générateur pour déléguer une partie de ses opérations à un autre générateur.
A partir de Python 3.4, le module asyncio
a été ajouté à la bibliothèque standard. Cela nous permet d'écrire du code asynchrone clair et compréhensible. Tandis que techniquement les coroutines d'asyncio pouvaient être implémentées de différentes façons, en asyncio
elles ont été implémentées en utilisant des générateurs (vous pouvez regarder excellent video où montré comment les générateurs peuvent être utilisés pour implémenter des coroutines). @asyncio.coroutine
était une façon de faire de la coroutine à partir du générateur et yield from
était un moyen d'attendre pour la coroutine - juste des détails de l'implémentation.
C'est ainsi que yield from
a commencé à être utilisé pour deux "choses différentes". À partir de Python 3.5 (voir PEP 492), les coroutines ont une nouvelle syntaxe. Vous pouvez maintenant définir la coroutine avec async def
et l'attendre en utilisant l'expression await
. Ce n'est pas seulement plus court à écrire, mais il est aussi plus clair de comprendre que nous travaillons avec des coroutines.
Si vous utilisez Python 3.5+, vous pouvez oublier d'utiliser yield from
pour tout sauf les générateurs et utiliser await
pour les coroutines.
Il semble que la deuxième question que vous avez liée donne une explication assez simple de la façon dont 'async' et' await' peuvent être utilisés pour exprimer de façon plus succincte ce que vous aviez besoin de 'yield from' & 'asyncio.coroutine 'exprimer. Je suppose que je ne suis pas vraiment sûr de ce que la question demande puisque cet exemple semble l'expliquer plutôt bien. Peux-tu être plus précis? – mgilson
@mgilson cela va dans la façon dont 'await' se rapporte à' yield from 'mais pas réellement ce que 'yield from' fait – Atsch
Ils sont identiques, sauf' await' est plus [récent] (https: //www.python. org/dev/peps/pep-0492 /) et semble beaucoup mieux – Vincent