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?>