perlu menggunakan pernyataan async def
Apa yang boleh dilakukan oleh coroutine:
1 Tunggu keputusan masa hadapan
2 , tunggu coroutine lain (hasilkan keputusan atau bangkitkan pengecualian)
3. Hasilkan hasil kepada coroutine yang menunggunya
4. Lemparkan pengecualian kepada coroutine yang sedang menunggu for it Program
Panggil fungsi coroutine, coroutine tidak akan mula berjalan, ia hanya mengembalikan objek coroutine
Terdapat dua cara untuk menjalankan coroutine objek Kaedah:
1. Gunakan await
untuk menunggunya dalam coroutine lain yang sudah berjalan
2. Rancang pelaksanaannya melalui fungsi ensure_future
Hanya tertentu sahaja apabila gelung benang sedang berjalan bolehkah coroutine dijalankan
Contoh berikut:
Mula-mula dapatkan gelung lalai benang semasa, dan kemudian serahkan objek coroutine kepada loop.run_until_complete, coroutine Objek kemudiannya akan dijalankan dalam gelung
loop = asyncio.get_event_loop() loop.run_until_complete(do_some_work(3))
run_until_complete
ialah panggilan menyekat Ia tidak akan kembali sehingga coroutine selesai dijalankan
Parameternya ialah masa depan, tetapi apa kita luluskan kepadanya Ia adalah objek coroutine Ia melakukan pemeriksaan dalaman dan membungkus objek coroutine ke masa hadapan
melalui fungsi ensure_future Kita boleh menulis seperti ini:
loop.run_until_complete(asyncio.ensure_future(do_some_work(3)))
asyncio.gathre
loop.run_until_complete(asyncio.gather(do_some_work(1), do_some_work(3)))
loop = asyncio.get_event_loop() #获取当前线程loop coros_list = [] for i in range(2000): coros_list.append(main(i)) loop.run_until_complete(asyncio.gather(*coros_list))
loop = asyncio.get_event_loop() #获取当前线程loop loop.run_until_complete(do_some_work(loop, 1)) loop.run_until_complete(do_some_work(loop, 3)) loop.close()
loop = asyncio.get_event_loop() #获取当前线程loop loop.run_until_complete(do_some_work(loop, 1)) loop.close() loop.run_until_complete(do_some_work(loop, 3)) # 此处异常
def done_callback(futu): print('Done') futu = asyncio.ensure_future(do_some_work(3)) futu.add_done_callback(done_callback) loop.run_until_complete(futu)
asyncio.get_running_loop() # 返回当前os线程中正在运行的事件循环 asyncio.get_event_loop() # 获取当前事件循环 asyncio.set_event_loop(loop) # 获取当前事件循环 asyncio.new_event_loop() # 创建并返回一个新的事件循环对象
asyncio.get_event_loop()Jika:
loop = asyncio.new_event_loop() asyncio.set_event_loop(loop)
Atas ialah kandungan terperinci Bagaimana untuk menggunakan fungsi biasa asyncio Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!