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).
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.
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!!!
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)
Recommended Posts