asyncio --- penjadwal I/O asinkron¶
Modul ini menyediakan penjadwal multitasking kooperatif untuk coroutine async/await, beserta primitif untuk sinkronisasi (kunci, event) dan jaringan TCP non-blokir melalui pembaca dan penulis stream. Tugas-tugas dijalankan secara bersamaan pada satu event loop; tugas yang sedang berjalan mengalihkan kendali kembali ke loop dengan await.
Contoh:
import asyncio
async def blink(led, period_ms):
while True:
led.on()
await asyncio.sleep_ms(5)
led.off()
await asyncio.sleep_ms(period_ms)
async def main(led1, led2):
asyncio.create_task(blink(led1, 700))
asyncio.create_task(blink(led2, 400))
await asyncio.sleep_ms(10_000)
# Running on an OpenMV Cam
from machine import LED
asyncio.run(main(LED(1), LED(2)))
Fungsi inti¶
- asyncio.create_task(coro: Coroutine) Task¶
Buat tugas baru dari coroutine yang diberikan dan jadwalkan untuk dijalankan.
Mengembalikan objek
Taskyang sesuai.
- asyncio.current_task() Task¶
Mengembalikan objek
Taskyang terkait dengan tugas yang sedang berjalan.
- asyncio.run(coro: Coroutine) Any¶
Buat tugas baru dari coroutine yang diberikan dan jalankan hingga selesai.
Mengembalikan nilai yang dikembalikan oleh coro.
Fungsi tambahan¶
- asyncio.wait_for(awaitable: Awaitable, timeout: float) Any¶
Tunggu hingga awaitable selesai, tetapi batalkan jika membutuhkan waktu lebih dari timeout detik. Jika awaitable bukan tugas, maka tugas akan dibuat darinya.
Jika batas waktu tercapai, tugas dibatalkan dan pengecualian
asyncio.TimeoutErrordimunculkan: ini harus ditangkap oleh pemanggil. Tugas menerimaasyncio.CancelledErroryang dapat diabaikan atau ditangkap menggunakantry...exceptatautry...finallyuntuk menjalankan kode pembersihan.Mengembalikan nilai kembalian dari awaitable.
Ini adalah coroutine.
- asyncio.wait_for_ms(awaitable: Awaitable, timeout: int) Any¶
Mirip dengan
wait_for()namun timeout adalah bilangan bulat dalam milidetik.Ini adalah coroutine, dan merupakan ekstensi MicroPython.
class Task¶
- class asyncio.Task¶
Objek ini membungkus coroutine menjadi tugas yang berjalan. Tugas dapat ditunggu menggunakan
await task, yang akan menunggu tugas selesai dan mengembalikan nilai kembalian tugas tersebut.Tugas tidak boleh dibuat secara langsung, gunakan
create_task()untuk membuatnya.
class Event¶
- class asyncio.Event¶
Buat event baru yang dapat digunakan untuk menyinkronkan tugas. Event dimulai dalam keadaan tidak aktif.
- set() None¶
Set event. Semua tugas yang menunggu event akan dijadwalkan untuk dijalankan.
Catatan: Ini harus dipanggil dari dalam tugas. Tidak aman untuk memanggilnya dari IRQ, callback penjadwal, atau thread lain. Lihat
ThreadSafeFlag.
class ThreadSafeFlag¶
- class asyncio.ThreadSafeFlag¶
Buat flag baru yang dapat digunakan untuk menyinkronkan tugas dengan kode yang berjalan di luar loop asyncio, seperti thread lain, IRQ, atau callback penjadwal. Flag dimulai dalam keadaan tidak aktif.
- set() None¶
Set flag. Jika ada tugas yang menunggu flag, tugas tersebut akan dijadwalkan untuk dijalankan.
class Lock¶
- class asyncio.Lock¶
Buat kunci baru yang dapat digunakan untuk mengkoordinasikan tugas. Kunci dimulai dalam keadaan tidak terkunci.
Selain metode di bawah ini, kunci dapat digunakan dalam pernyataan
async with.
Koneksi stream TCP¶
- asyncio.open_connection(host: str, port: int, ssl: ssl.SSLContext | bool | None = None) Tuple[Stream, Stream]¶
Buka koneksi TCP ke host dan port yang diberikan. Alamat host akan diselesaikan menggunakan
socket.getaddrinfo(), yang saat ini merupakan panggilan pemblokiran. Jika ssl adalah objekssl.SSLContext, konteks ini digunakan untuk membuat transport; jika ssl adalahTrue, konteks default digunakan.Mengembalikan sepasang stream: stream pembaca dan penulis. Akan memunculkan
OSErrorkhusus socket jika host tidak dapat diselesaikan atau jika koneksi tidak dapat dibuat.Ini adalah coroutine.
- asyncio.start_server(callback: Callable, host: str, port: int, backlog: int = 5, ssl: ssl.SSLContext | None = None) Server¶
Mulai server TCP pada host dan port yang diberikan. callback akan dipanggil dengan koneksi masuk yang diterima, dan diteruskan 2 argumen: stream pembaca dan penulis untuk koneksi tersebut.
Jika ssl adalah objek
ssl.SSLContext, konteks ini digunakan untuk membuat transport.Mengembalikan objek
Server.Ini adalah coroutine.
- class asyncio.Stream¶
Ini mewakili koneksi stream TCP. Untuk meminimalkan kode, kelas ini mengimplementasikan pembaca dan penulis, dan
StreamReadersertaStreamWriteradalah alias untuk kelas ini.- get_extra_info(v: str) Any¶
Dapatkan informasi tambahan tentang stream, yang diberikan oleh v. Nilai valid untuk v adalah:
peername.
- read(n: int = -1) bytes¶
Baca hingga n byte dan kembalikan. Jika n tidak disediakan atau -1 maka baca semua byte hingga EOF. Nilai yang dikembalikan akan menjadi objek bytes kosong jika EOF ditemui sebelum byte apa pun dibaca.
Ini adalah coroutine.
- readinto(buf: bytearray | memoryview) int¶
Baca hingga n byte ke dalam buf dengan n sama dengan panjang buf.
Kembalikan jumlah byte yang dibaca ke dalam buf.
Ini adalah coroutine, dan merupakan ekstensi MicroPython.
- readexactly(n: int) bytes¶
Baca tepat n byte dan kembalikan sebagai objek bytes.
Memunculkan pengecualian
EOFErrorjika stream berakhir sebelum membaca n byte.Ini adalah coroutine.
- write(buf: bytes) None¶
Akumulasikan buf ke buffer keluaran. Data hanya di-flush ketika
Stream.drain()dipanggil. Disarankan untuk memanggilStream.drain()segera setelah memanggil fungsi ini.
Event Loop¶
- asyncio.get_event_loop() Loop¶
Kembalikan event loop yang digunakan untuk menjadwalkan dan menjalankan tugas. Lihat
Loop.
- asyncio.new_event_loop() Loop¶
Reset event loop dan kembalikan.
Catatan: karena MicroPython hanya memiliki satu event loop, fungsi ini hanya mereset keadaan loop, bukan membuat yang baru.
- class asyncio.Loop¶
Ini mewakili objek yang menjadwalkan dan menjalankan tugas. Tidak dapat dibuat, gunakan
get_event_loop()sebagai gantinya.- create_task(coro: Coroutine) Task¶
Buat tugas dari coro yang diberikan dan kembalikan objek
Taskbaru.
- run_until_complete(awaitable: Awaitable) Any¶
Jalankan awaitable yang diberikan hingga selesai. Jika awaitable bukan tugas maka akan dipromosikan menjadi tugas.
- set_exception_handler(handler: Callable) None¶
Atur penangan pengecualian yang dipanggil ketika sebuah Task memunculkan pengecualian yang tidak tertangkap. handler harus menerima dua argumen:
(loop, context).