8.13. Kontrol loop#
Sebagian besar skrip asyncio tidak pernah menyentuh event loop secara langsung -- asyncio.run() sudah cukup. Halaman ini mencakup permukaan Loop untuk kasus-kasus di mana itu tidak cukup: memasang handler pengecualian, menjalankan loop dengan siklus hidup yang berbeda dari run, atau menyimpan objek loop untuk instrumentasi.
8.13.1. Mendapatkan loop#
asyncio.get_event_loop()-- mengembalikan objekLoop. Aman dipanggil dari dalam maupun luar coroutine.asyncio.new_event_loop()-- pada MicroPython, mengatur ulang state loop yang ada daripada membuat yang baru. Catatan ini perlu diulang: hanya ada satu event loop per program.
Tidak ada API untuk menjalankan loop selain metode pada Loop dan asyncio.run().
8.13.2. Menjalankan loop secara langsung#
asyncio.run() adalah titik masuk yang tepat untuk hampir setiap aplikasi. Dua metode Loop ada untuk kasus di mana itu tidak cukup.
run_until_complete()-- diberikan sebuah awaitable, jalankan loop hingga awaitable tersebut selesai, lalu kembalikan hasilnya. Setara dengan satu panggilanasyncio.run(), dengan pembongkaran loop dihilangkan.run_forever()-- jalankan loop hinggastop()dipanggil dari dalam sebuah task. Tidak ada awaitable tingkat atas; aplikasi diharapkan menjadwalkan apa pun yang dibutuhkan melaluiasyncio.create_task()sebelum memanggilrun_forever.
Metode pendamping adalah stop() (minta loop berhenti setelah task saat ini selesai) dan close() (bebaskan sumber daya loop).
8.13.3. Pembuatan task sisi loop#
create_task()-- operasi yang sama denganasyncio.create_task(). Fungsi bebas ada agar kode aplikasi tidak memerlukan referensi loop untuk kasus umum; metode ada untuk instrumentasi yang sudah memilikinya.
8.13.4. Handler pengecualian#
Loop memanggil sebuah handler ketika task memunculkan pengecualian yang tidak ditangkap oleh siapa pun dalam rantai panggilan coroutine -- kasus umum adalah task yang dibuat aplikasi dengan asyncio.create_task() dan tidak pernah di-await. Handler default mencetak traceback melalui sys.stderr; halaman pengecualian menunjukkan cara menggantinya dengan yang kustom.
set_exception_handler()-- pasang handler kustom. Handler adalah callablehandler(loop, context)di manacontextadalah dict dengan setidaknya'message'dan biasanya'exception'dan'future'.get_exception_handler()-- kembalikan handler yang saat ini terpasang, atauNonejika yang default sedang digunakan.default_exception_handler()-- handler bawaan. Berguna di dalam handler kustom yang ingin juga menjalankan perilaku default (catat ke flash dan cetak traceback, misalnya).call_exception_handler()-- jalankan handler yang saat ini terpasang dengan dict konteks yang dibuat secara manual. Sebagian besar digunakan oleh loop itu sendiri; aplikasi jarang membutuhkannya.