Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk menggunakan fungsi biasa asyncio Python?
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)))atau menyimpan objek coroutine ke senarai ini adalah lebih biasa.
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))berkumpul bertindak sebagai pengagregatan, membungkus berbilang niaga hadapan ke dalam satu masa hadapan, kerana loop.run_until_complete hanya menerima satu masa hadapan. Perihal loop.close()Ringkasnya, selagi gelung tidak ditutup, ia masih boleh dijalankan. :
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()Tetapi jika ia ditutup, ia tidak boleh dijalankan lagi:
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)) # 此处异常Panggil balikMenyertai coroutine ialah operasi membaca IO Selepas dia selesai membaca data, Kami ingin dimaklumkan untuk pemprosesan selanjutnya data. Ini boleh dicapai dengan menambahkan panggilan balik pada masa hadapan
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)Gelung peristiwaGelung acara akan menjalankan tugas dan panggilan balik tak segerak, melaksanakan operasi IO rangkaian dan menjalankan proses anak Daripada gelung peristiwa asyncio Dalam dokumen dasar, kami mengetahui bahawa dasar gelung peristiwa ialah objek global proses yang mengawal pengurusan semua gelung peristiwa dalam proses. Dasar global proses mentakrifkan maksud konteks yang dikawal oleh dasar dan mengurus gelung peristiwa yang berasingan dalam setiap konteks Konteks yang ditakrifkan oleh dasar lalai ialah urutan semasa, yang bermaksud urutan yang berbeza Konteks yang berbeza, oleh itu gelung peristiwa yang berbeza. Dapatkan gelung acara
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!