En pratique, tirer parti de la syntaxe « rendement de » dans Python 3.3
La syntaxe « rendement de », introduite dans Python 3.3, offre une amélioration significative des capacités des générateurs et des coroutines. Il établit une connexion bidirectionnelle entre un appelant et un sous-générateur, permettant une communication transparente dans les deux sens.
Cas d'utilisation pour « rendement de »
Lecture Données des générateurs :
<code class="python">def reader(): for i in range(4): yield '<< %s' % i def reader_wrapper(g): yield from g wrap = reader_wrapper(reader()) for i in wrap: print(i) # Result: # << 0 # << 1 # << 2 # << 3
Envoi de données à des coroutines :
<code class="python">def writer(): while True: w = (yield) print('>> ', w) def writer_wrapper(coro): yield from coro w = writer() wrap = writer_wrapper(w) wrap.send(None) # Prime the coroutine for i in range(4): wrap.send(i) # Expected result: # >> 0 # >> 1 # >> 2 # >> 3</code>
Comparaison avec les micro-threads
Le rendement de la syntaxe partage certaines similitudes avec les micro-threads dans le sens où il permet de suspendre et reprise des coroutines, créant une alternative légère aux threads traditionnels. Cependant, les coroutines sont plus légères et ont une surcharge de mémoire inférieure à celle des micro-threads. Ils s'exécutent également sur le même thread, évitant ainsi les problèmes associés au changement de contexte dans les environnements multithread.
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!