saya sedikit baru mengenal asyncio dengan python. Saya mencoba menjalankan kode sederhana ini tetapi saya tidak tahu mengapa saya mendapatkan hasil yang tidak terduga ini.
Apa yang saya lakukan adalah, dalam fungsi outer
, saya membuat tugas async dan menyimpannya dalam array tasks
. Sebelum menunggu tugas ini saya menulis pernyataan cetak print("outer")
yang harus dijalankan di setiap iterasi. Dan di dalam tugas saya menulis pernyataan cetak lainnya print("inner")
dalam fungsi inner
. Tetapi entah bagaimana saya mendapatkan hasil yang tidak terduga.
Ini kodenya -
import asyncio
def main():
loop = asyncio.get_event_loop()
loop.run_until_complete(outer(loop))
loop.close()
async def outer(loop):
tasks = []
for i in range(0, 5):
tasks.append(loop.create_task(inner()))
for task in tasks:
print("outer")
await task
async def inner():
print("inner")
await asyncio.sleep(0.5)
if __name__ == '__main__':
main()
Inilah hasilnya -
outer
inner
inner
inner
inner
inner
outer
outer
outer
outer
Hasil yang saya harapkan adalah -
outer
inner
outer
inner
outer
inner
outer
inner
outer
inner
Mengapa semua inner
mencetak sebelum outer
. Apa alur eksekusi asyncio yang benar. Terima kasih sebelumnya.
await
kemudian ditangguhkan.. Contoh Anda mirip dengan contoh coroutine di dokumen yang memiliki hasil serupa. - person wwii   schedule 29.03.2020While a Task is running in the event loop, no other Tasks can run in the same thread. When a Task executes an await expression, the running Task gets suspended, and the event loop executes the next Task.
- person wwii   schedule 29.03.2020for
berikutnya. Jika benar, makaouter
seharusnya dicetak. - person shikhar srivastava   schedule 30.03.2020