python async / attend curio

J'ai essayé python curio.

L'idée de base est d'utiliser async / await. En d'autres termes, cela devient "créer une tâche et la transformer". Les tâches sont déclarées sous forme de fonctions avec le mot-clé ʻasync`. Dans le shell interactif, vous préparerez et exécuterez quelque chose qui "transforme la tâche". Il y a eu «asyncio» depuis longtemps, mais cela peut être «curio». Vous pouvez également appeler la méthode coroutine.

>>> async def hello():
...     return "Hello"
...
>>> import curio
>>> curio.run(hello())
'Hello'
>>> import asyncio
>>> asyncio.get_event_loop().run_until_complete(hello())
'Hello'
>>> try:
...  hello().send(None)
... except StopIteration as e:
...  e.value
...
'Hello'

«curio» peut être court.

Ceci est une comparaison entre «asyncio» et «curio». ʻAsyncio ne semble pas être la meilleure conception pour async / await, en partie parce que c'était avant la création de la syntaxe async / await (https://vorpus.org/blog/some-ought-on- asynchronous-api-design-in-a-post-asyncawait-world /). Lorsque vous vous habituez à «curio», «asyncio» ressemble à une autoroute sans garde-corps. J'hésite à dire [ce sera plus rapide](https://magic.io/blog/uvloop-blazing-fast-python-networking/) dans ʻuvloop.

auteur asyncio. https://www.youtube.com/watch?v=m28fiN9y_r8

auteur de curiosités. Le codage en direct est vivant https://www.youtube.com/watch?v=ZzfHjytDceU https://www.youtube.com/watch?v=MCs5OvhV9S4

D'autre part, il y a une habitude considérable d'async / wait. La bibliothèque standard utilise implicitement l'objet socket à l'intérieur, mais lorsqu'elle est utilisée normalement, les E / S passent en mode de blocage, ce qui rend la combinaison difficile. En plus de la bibliothèque standard, il existe également une bibliothèque qui peut être utilisée comme machine à états en se concentrant sur la partie protocole en supprimant socket. Par exemple, "h11" et hyper "h2" sont relativement faciles à combiner dans async / await.

auteur h2. https://www.youtube.com/watch?v=7cC3_jGwl_U

Si vous essayez quelques trucs dans cette direction, vous obtiendrez quelque chose comme gevent, ʻeventlet sans monkey_patch`. Par rapport à «curio», est-ce que vous avez envie de peser les effets secondaires et la commodité de monkey_patch?

Le problème jusqu'à la toute fin est la connexion à la base de données. Je suis toujours à la recherche d'un cas d'utilisation pour utiliser SQLAlchemy ... Il est difficile de faire un bon analyseur de protocole avec un modèle qui cherche autour d'un gros fichier avec une structure.

Au fait, le document du développeur dit S'il vous plaît, n'utilisez pas Curio!. J'ai ri. Eh bien ... si gevent implémente le PEP492 __await__, ce serait une verge d'or pour le démon. Je ne suis pas convaincu qu'asyncio ne causera pas d'accident.

TIPS

Lorsque vous utilisez async / await, il est agréable de pouvoir détecter les fuites d'attente.

if __name__=="__main__":
	import logging
	logging.getLogger("asyncio").setLevel(logging.DEBUG)
	import gc
	gc.set_debug(gc.DEBUG_UNCOLLECTABLE)
	loop = asyncio.get_event_loop()
	loop.set_debug(True)
	try:
		loop.run_forever()
	finally:
		loop.close()

Recommended Posts

python async / attend curio
Scraping à l'aide de Python 3.5 async / await
[Python] Requête asynchrone avec async / await
Jouer Python async
Convertir l'API asynchrone de style callback en async / await en Python
Traitement asynchrone de Python ~ Comprenez parfaitement async et attendez ~
Scraping à l'aide de la syntaxe Python 3.5 Async
Benchmark des performances de thread léger utilisant async / await implémenté dans Python 3.5
Python: comment utiliser async avec
Python
Async / await avec Kivy et tkinter
Syntaxe Async / Await Résumé des langues disponibles