Ausführungsreihenfolge in der asynchronen Funktion. Wie wird es bestimmt?Python

Python-Programme
Anonymous
 Ausführungsreihenfolge in der asynchronen Funktion. Wie wird es bestimmt?

Post by Anonymous »

Wenn ich den folgenden asynchronen Code ausführe: < /p>

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post