Ausführungsreihenfolge in der asynchronen Funktion. Wie wird es bestimmt?
Posted: 02 Apr 2025, 03:40
Wenn ich den folgenden asynchronen Code ausführe: < /p>
Was genau passiert genau?
Wie kann ich die Reihenfolge der Ausführung vorhersagen? Nach meinem Verständnis läuft der Code wie erwartet, bis er auf eine Wartezeit erreicht wird. Dann schafft es eine Task-Schleife mit jedem anderen, der auf die Linie findet. Was es priorisiert . Richtig? < /P>
Das finde ich überraschend. Ich würde erwarten, dass der Druck (1) ausgeführt wird, bevor eine Aufgabe abgeschlossen ist. Warum nicht? < /P>
Ist das das Standardverhalten oder variiert es? Wenn ja, was variiert es?>
Code: Select all
from asyncio import create_task, sleep, run
async def print_(delay, x):
print(f'start: {x}')
await sleep(delay)
print(f'end: {x}')
async def main():
slow_task = create_task(print_(2, 'slow task'))
fast_task = create_task(print_(1, 'fast task'))
# The order of execution here is strange:
print(0)
await slow_task
print(1)
await fast_task
run(main())
< /code>
Ich erhalte eine unerwartete Ausführungsreihenfolge: < /p>
0
start: slow task
start: fast task
end: fast task
end: slow task
1
Wie kann ich die Reihenfolge der Ausführung vorhersagen? Nach meinem Verständnis läuft der Code wie erwartet, bis er auf eine Wartezeit erreicht wird. Dann schafft es eine Task-Schleife mit jedem anderen, der auf die Linie findet. Was es priorisiert . Richtig? < /P>
Das finde ich überraschend. Ich würde erwarten, dass der Druck (1) ausgeführt wird, bevor eine Aufgabe abgeschlossen ist. Warum nicht? < /P>
Ist das das Standardverhalten oder variiert es? Wenn ja, was variiert es?>