Warum blockiert die CPU -gebundene Aufgabe keine Asyncio -Ereignisschleife?Python

Python-Programme
Guest
 Warum blockiert die CPU -gebundene Aufgabe keine Asyncio -Ereignisschleife?

Post by Guest »

Ich möchte in Python in asynchroner Aufgabenausführung tief eingehen und experimentieren, wenn die CPU -gebundene Aufgabe gleichzeitig mit der IO -gebundenen Aufgabe ausgeführt wird. und die IO -gebundene Aufgabe beginnt nach Abschluss der CPU -gebundenen Aufgabe. Aber in meinem Experiment sehe ich, dass die IO -gebundene Aufgabe startet und gleichzeitig mit CPU -gebundenen endet. Ich möchte eine Antwort finden, warum es passiert. Multiplizieren und Teilung.import asyncio
from datetime import datetime

async def io_bound(i):
print(f'start io_bound {i} {datetime.now().strftime("%H:%M:%S")}')
await asyncio.sleep(1)
print(f'finish io_bound {i} {datetime.now().strftime("%H:%M:%S")}')

async def cpu_bound():
print(f'start cpu_bound {datetime.now().strftime("%H:%M:%S")}')
for i in range(5 * 10**7):
i *= i+1
i /= i+1
print(f'finish cpu_bound {datetime.now().strftime("%H:%M:%S")}')

async def main():
await io_bound(1)
asyncio.create_task(cpu_bound())
await io_bound(2)

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(main())
< /code>
Ausgabe: < /p>
start io_bound 1 17:28:20
finish io_bound 1 17:28:21
start io_bound 2 17:28:21
start cpu_bound 17:28:21
finish cpu_bound 17:28:26
finish io_bound 2 17:28:26
< /code>
Ich habe erwartet, dass die Ausgabe: < /p>
sein solltestart io_bound 1 17:28:20
finish io_bound 1 17:28:21
start io_bound 2 17:28:21
start cpu_bound 17:28:21
finish cpu_bound 17:28:26
finish io_bound 2 17:28:27
< /code>
Das heißt, die IO_Bound -Aufgabe sollte eine Sekunde nach Abschluss von CPU_BOUND beenden. Nicht CPU -Blockausführung anderer Aufgaben gebunden?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post