[PYTHON] Ich habe versucht, asynchrone Verarbeitung mit Asyncio

Auslösen

Ich hatte keinen guten Beispielcode für "asyncio", aber On-Demand-Daten in Python, Teil 3 Corroutine und asyncio -on-demand-data-python-3 / index.html) erklärte mit einer spezifischeren Geschichte, dass der Kellner im Restaurant mehrere Bestellungen bearbeitet, so dass es am einfachsten zu verstehen und hilfreich ist. .. Häufig gesehen Async verstehen / warten in Python3 und [Asynchrone Verarbeitung in Python: Asyncio-Reverse-Referenz](https://qiita.com/icoxfog417/ Besser als Artikel / 07cbf5110ca82629aca0).

Entwicklung von

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:{}]{}Sekunden sind vergangen".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()

Der Punkt von Interesse ist len([ task for task in asyncio.Task.all_tasks(loop) if not task.done()]) Sie können die aktuell residenten Aufgaben abrufen, indem Sie "asyncio.Task.all_tasks (loop)" ausführen, wenn nicht "task.done ()" in.

Ergebnis

Das Ausgabeergebnis ist wie folgt. Wenn nur der Hauptprozess ausgeführt wird, befindet er sich außerhalb der Schleife.

[run:3]1 Sekunde verging
[run:3]2 Sekunden sind vergangen
[run:3]3 Sekunden sind vergangen
[run:3]4 Sekunden sind vergangen
[run:3]5 Sekunden sind vergangen
[run:3]6 Sekunden sind vergangen
[run:3]7 Sekunden sind vergangen
[run:3]8 Sekunden vergingen
[run:3]9 Sekunden vergingen
START!!!
[run:2]10 Sekunden sind vergangen
[run:2]11 Sekunden sind vergangen
[run:2]12 Sekunden sind vergangen
[run:2]13 Sekunden vergingen
[run:2]14 Sekunden vergingen
[run:2]15 Sekunden sind vergangen
[run:2]16 Sekunden vergingen
[run:2]17 Sekunden vergingen
[run:2]18 Sekunden vergingen
[run:2]19 Sekunden sind vergangen
END!!!

abschließend

asyncio.Task.all_tasks () ist in Python 3.7 und höher veraltet und wird in 3.9 entfernt. Besonders im "Asyncio" -Teil scheint sich der Schreibstil mit zunehmender Version erheblich zu ändern. (Siehe Python3.8 doc Task Object)

Referenzierter Link

Recommended Posts

Ich habe versucht, asynchrone Verarbeitung mit Asyncio
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Ich habe versucht, easydict (Memo) zu verwenden.
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Ich habe versucht, RandomForest zu verwenden
Ich habe versucht, BigQuery ML zu verwenden
Ich habe versucht, Amazon Glacier zu verwenden
Ich habe versucht, Git Inspector zu verwenden
Erzielen Sie eine asynchrone http-Kommunikation mit asyncio
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
Ich habe versucht, Magenta / TensorFlow zu verwenden
Ich habe versucht, Slack Emojinator zu verwenden
Ich habe versucht, Rotrics Dex Arm # 2 zu verwenden
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
Ich habe versucht, Rotrics Dex Arm zu verwenden
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe versucht, Thonny (Python / IDE) zu verwenden.
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 1
Ich habe versucht, mit PyBrain verstärkt zu lernen
Ich habe versucht, mit Theano tief zu lernen
Ich habe irgendwie versucht, ein Jupyter-Notebook zu verwenden
[Kaggle] Ich habe versucht, mit unausgeglichenem Lernen zu unterabtasten
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 2
Ich habe versucht, Amazon SQS mit Django-Sellerie zu verwenden
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Asynchrone Verarbeitung mit Linebot in der Jobwarteschlange
Ich habe versucht, ○ ✕ mit TensorFlow zu spielen
Ich habe versucht, YOUTUBE Data API V3 zu verwenden
Ich habe versucht, Selen mit Headless-Chrom zu verwenden
Ich habe versucht, mit einer Schildkröte eine Linie zu ziehen
[Kaggle] Ich habe versucht, Ensemble mit LightGBM zu lernen
Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 2: Ich habe versucht, PyEZ zu verwenden
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden