[PYTHON] J'ai essayé le traitement asynchrone en utilisant asyncio

Déclencheur

Je n'avais pas de bon exemple de code pour ʻasyncio`, mais Données à la demande en Python, Partie 3 Corroutine et asyncio -on-demand-data-python-3 / index.html) expliqué avec une histoire plus spécifique que le serveur du restaurant gère plusieurs commandes, c'est donc le plus facile à comprendre et utile. .. Fréquemment vu Understanding async / await in python3 et [Asynchronous processing in Python: asyncio reverse reference](https://qiita.com/icoxfog417/ Mieux que les articles / 07cbf5110ca82629aca0).

développement de

import asyncio
import time

async def start_time(src):
	await asyncio.sleep(src)
	print("START!!!")

async def main_process(span):
	idx = 1
	while True:
		await asyncio.sleep(span)
		num_active_tasks = len([ task for task in asyncio.Task.all_tasks(loop) if not task.done()])
		if num_active_tasks == 1:
			break
		print("[run:{}]{}Les secondes ont passé".format(num_active_tasks, idx * span))
		idx += 1


async def end_time(src):
	await asyncio.sleep(src)
	print("END!!!")

if __name__ == "__main__":
	loop = asyncio.get_event_loop()
	try:
		loop.run_until_complete(
			asyncio.gather(
				start_time(10),
				main_process(1),
				end_time(20)
			)
		)
	finally:
		loop.close()

Le point d'intérêt est len([ task for task in asyncio.Task.all_tasks(loop) if not task.done()]) Vous pouvez obtenir les tâches actuellement résidentes en faisant ʻasyncio.Task.all_tasks (loop) sinon task.done () `.

résultat

Le résultat de sortie est le suivant. Si seul le processus principal est en cours d'exécution, il est hors de la boucle.

[run:3]1 seconde passée
[run:3]2 secondes se sont écoulées
[run:3]3 secondes se sont écoulées
[run:3]4 secondes se sont écoulées
[run:3]5 secondes se sont écoulées
[run:3]6 secondes se sont écoulées
[run:3]7 secondes se sont écoulées
[run:3]8 secondes passées
[run:3]9 secondes passées
START!!!
[run:2]10 secondes se sont écoulées
[run:2]11 secondes se sont écoulées
[run:2]12 secondes se sont écoulées
[run:2]13 secondes passées
[run:2]14 secondes passées
[run:2]15 secondes se sont écoulées
[run:2]16 secondes passées
[run:2]17 secondes passées
[run:2]18 secondes passées
[run:2]19 secondes se sont écoulées
END!!!

en conclusion

ʻAsyncio.Task.all_tasks () est obsolète dans Python 3.7 et versions ultérieures et sera supprimé dans la version 3.9. Surtout dans la partie de ʻasyncio, le style d'écriture semble changer considérablement à chaque fois que la version monte. (Voir Objet de tâche doc Python3.8)

Lien référencé

Recommended Posts

J'ai essayé le traitement asynchrone en utilisant asyncio
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
J'ai essayé d'utiliser easydict (mémo).
J'ai essayé la reconnaissance faciale avec Face ++
J'ai essayé d'utiliser RandomForest
J'ai essayé d'utiliser BigQuery ML
J'ai essayé d'utiliser Amazon Glacier
J'ai essayé d'utiliser git inspector
Réalisez une communication http asynchrone en utilisant asyncio
J'ai essayé 100 traitements linguistiques Knock 2020
J'ai essayé d'utiliser magenta / TensorFlow
J'ai essayé d'utiliser l'émojinateur Slack
J'ai essayé d'utiliser Rotrics Dex Arm # 2
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
J'ai essayé d'utiliser Rotrics Dex Arm
J'ai essayé d'utiliser GrabCut d'OpenCV
J'ai essayé d'utiliser Thonny (Python / IDE)
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 1
J'ai essayé l'apprentissage par renforcement avec PyBrain
J'ai essayé l'apprentissage en profondeur avec Theano
J'ai essayé d'utiliser le notebook jupyter d'une manière ou d'une autre
[Kaggle] J'ai essayé le sous-échantillonnage en utilisant un apprentissage déséquilibré
J'ai essayé d'utiliser l'API checkio
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 2
J'ai essayé d'utiliser Amazon SQS avec django-celery
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé le serveur asynchrone de Django 3.0
Traitement asynchrone à l'aide de Linebot dans la file d'attente des travaux
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
J'ai essayé d'utiliser l'API de données YOUTUBE V3
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
J'ai essayé de dessiner une ligne en utilisant une tortue
[Kaggle] J'ai essayé l'apprentissage d'ensemble avec LightGBM
J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 2: J'ai essayé d'utiliser PyEZ
J'ai essayé d'utiliser l'optimisation bayésienne de Python