8. Asyncio¶
Sejauh ini setiap skrip dalam tutorial bersifat sekuensial -- satu baris berjalan pada satu waktu, dan panggilan yang harus menunggu (pembacaan sensor, perjalanan bolak-balik jaringan, snapshot) memblokir skrip hingga selesai. Itu berhasil selama hanya ada satu hal yang harus dilakukan. Begitu aplikasi perlu melakukan beberapa hal sekaligus -- menjalankan loop snapshot dan menjawab perintah serial, dan mengunggah bingkai melalui jaringan -- skrip sekuensial tidak mampu lagi. Panggilan lambat pertama menghentikan semua yang lain dari kemajuan.
Modul asyncio adalah jawaban MicroPython. Ini memungkinkan aplikasi mendeskripsikan beberapa pekerjaan sebagai coroutine terpisah dan menjalankannya secara bersamaan pada satu thread, secara kooperatif -- coroutine yang sedang berjalan menghasilkan kontrol kembali ke penjadwal setiap kali harus menunggu. Loop snapshot, pembaca UART, dan klien jaringan semuanya dapat hidup dalam skrip yang sama dan bagian lambat dari satu tidak lagi membekukan yang lain.
Halaman-halaman berikutnya mencakup kata kunci async/await dan siklus hidup Task, koordinasi melalui gather() dan wait_for(), pembatalan dan propagasi pengecualian, tiga primitif sinkronisasi bawaan (Event, Lock, ThreadSafeFlag), hook bahasa untuk menghubungkan kelas aplikasi ke idiom asyncio, pembungkus CSI kecil yang membuat snapshot() berjalan sebagai coroutine, dan jebakan umum yang muncul dengan penjadwalan kooperatif.
Koordinasi
Primitif sinkronisasi
Objek async kustom
Kontrol loop
Pengambilan bingkai
Jebakan umum
Penutup