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?>
Warum blockiert die CPU -gebundene Aufgabe keine Asyncio -Ereignisschleife? ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Asyncio kann nicht zur nächsten Aufgabe übergehen, wenn die Ausnahme eintritt
by Anonymous » » in Python - 0 Replies
- 12 Views
-
Last post by Anonymous
-