asyncio — aszinkron I/O ütemező#

Ez a modul kooperatív többfeladatos ütemezőt biztosít az async/await korutinokhoz, valamint szinkronizációs primitíveket (zárak, események) és nem blokkoló TCP-hálózatkezelést adatfolyam-olvasókon és -írókon keresztül. A feladatok egyetlen eseményhurkon futnak párhuzamosan; az éppen futó feladat az await segítségével adja vissza a vezérlést a huroknak.

Példa:

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)))

Alapvető függvények#

asyncio.create_task(coro: Coroutine) Task#

Létrehoz egy új feladatot a megadott korutinból, és ütemezi a futtatását.

Visszaadja a hozzá tartozó Task objektumot.

asyncio.current_task() Task#

Visszaadja az éppen futó feladathoz tartozó Task objektumot.

asyncio.run(coro: Coroutine) Any#

Létrehoz egy új feladatot a megadott korutinból, és futtatja, amíg be nem fejeződik.

Visszaadja a coro által visszaadott értéket.

asyncio.sleep(t: float) None#

Alszik t másodpercig (lehet lebegőpontos szám is).

Ez egy korutin.

asyncio.sleep_ms(t: int) None#

Alszik t ezredmásodpercig.

Ez egy korutin, és egyben MicroPython-bővítmény.

További függvények#

asyncio.wait_for(awaitable: Awaitable, timeout: float) Any#

Megvárja, amíg az awaitable befejeződik, de megszakítja, ha tovább tart timeout másodpercnél. Ha az awaitable nem feladat, akkor feladat jön létre belőle.

Időtúllépés esetén megszakítja a feladatot, és asyncio.TimeoutError kivételt vált ki: ezt a hívónak kell elkapnia. A feladat asyncio.CancelledError kivételt kap, amely figyelmen kívül hagyható, vagy elkapható try...except vagy try...finally használatával takarítókód futtatásához.

Visszaadja az awaitable visszatérési értékét.

Ez egy korutin.

asyncio.wait_for_ms(awaitable: Awaitable, timeout: int) Any#

Hasonló a wait_for() függvényhez, de a timeout egész szám ezredmásodpercben.

Ez egy korutin, és egyben MicroPython-bővítmény.

asyncio.gather(*awaitables, return_exceptions: bool = False) List#

Az összes awaitables párhuzamos futtatása. Azok az awaitables, amelyek nem feladatok, feladatokká alakulnak.

Visszaad egy listát az összes awaitables visszatérési értékeivel.

Ez egy korutin.

class Task#

class asyncio.Task#

Ez az objektum egy korutint csomagol be futó feladattá. A feladatokra az await task használatával lehet várni, ami megvárja a feladat befejeződését, és visszaadja a feladat visszatérési értékét.

A feladatokat nem közvetlenül kell létrehozni, hanem a create_task() függvényt kell használni hozzájuk.

cancel() None#

Megszakítja a feladatot azáltal, hogy asyncio.CancelledError kivételt injektál bele. A feladat figyelmen kívül hagyhatja ezt a kivételt. Takarítókód futtatható a kivétel elkapásával, vagy try ... finally használatával.

class Event#

class asyncio.Event#

Létrehoz egy új eseményt, amely feladatok szinkronizálására használható. Az események törölt állapotban indulnak.

is_set() bool#

Visszaadja a True értéket, ha az esemény be van állítva, egyébként False értéket.

set() None#

Beállítja az eseményt. Minden, az eseményre váró feladat futtatásra lesz ütemezve.

Megjegyzés: Ezt feladaton belülről kell hívni. Nem biztonságos IRQ-ból, ütemező-visszahívásból vagy más szálból hívni. Lásd: ThreadSafeFlag.

clear() None#

Törli az eseményt.

wait() None#

Megvárja, amíg az esemény beáll. Ha az esemény már be van állítva, azonnal visszatér.

Ez egy korutin.

class ThreadSafeFlag#

class asyncio.ThreadSafeFlag#

Létrehoz egy új jelzőt, amely egy feladat szinkronizálására használható az asyncio hurkon kívül futó kóddal, például más szálakkal, IRQ-kkal vagy ütemező-visszahívásokkal. A jelzők törölt állapotban indulnak.

set() None#

Beállítja a jelzőt. Ha van a jelzőre váró feladat, az futtatásra lesz ütemezve.

clear() None#

Törli a jelzőt. Ez használható annak biztosítására, hogy egy esetlegesen korábban beállított jelző törölve legyen, mielőtt várnánk rá.

wait() None#

Megvárja, amíg a jelző beáll. Ha a jelző már be van állítva, azonnal visszatér. A jelző a wait visszatérésekor automatikusan visszaáll.

Egy jelzőre egyszerre csak egyetlen feladat várhat.

Ez egy korutin.

class Lock#

class asyncio.Lock#

Létrehoz egy új zárat, amely feladatok összehangolására használható. A zárak feloldott állapotban indulnak.

Az alábbi metódusokon kívül a zárak async with utasításban is használhatók.

locked() bool#

Visszaadja a True értéket, ha a zár zárolva van, egyébként False értéket.

acquire() bool#

Megvárja, amíg a zár feloldott állapotba kerül, majd atomi módon zárolja. Egyszerre csak egy feladat szerezheti meg a zárat.

Ez egy korutin.

release() None#

Feloldja a zárat. Ha bármely feladat a zárra vár, akkor a sorban következő feladat futtatásra lesz ütemezve, és a zár zárolva marad. Egyébként, ha nincs várakozó feladat, a zár feloldódik.

TCP adatfolyam-kapcsolatok#

asyncio.open_connection(host: str, port: int, ssl: ssl.SSLContext | bool | None = None) Tuple[Stream, Stream]#

TCP-kapcsolatot nyit a megadott host és port felé. A host cím a socket.getaddrinfo() segítségével lesz feloldva, ami jelenleg blokkoló hívás. Ha az ssl egy ssl.SSLContext objektum, ez a kontextus lesz használva a transzport létrehozásához; ha az ssl értéke True, akkor egy alapértelmezett kontextus lesz használva.

Visszaad egy adatfolyam-párt: egy olvasó és egy író adatfolyamot. Socket-specifikus OSError kivételt vált ki, ha a host nem volt feloldható, vagy ha a kapcsolat nem volt létrehozható.

Ez egy korutin.

asyncio.start_server(callback: Callable, host: str, port: int, backlog: int = 5, ssl: ssl.SSLContext | None = None) Server#

TCP-szervert indít a megadott host és port címen. A callback a bejövő, elfogadott kapcsolatokkal lesz meghívva, és 2 argumentumot kap: a kapcsolat olvasó és író adatfolyamait.

Ha az ssl egy ssl.SSLContext objektum, ez a kontextus lesz használva a transzport létrehozásához.

Visszaad egy Server objektumot.

Ez egy korutin.

class asyncio.Stream#

Ez egy TCP adatfolyam-kapcsolatot képvisel. A kód minimalizálása érdekében ez az osztály egyaránt megvalósít olvasót és írót, és mind a StreamReader, mind a StreamWriter ennek az osztálynak az aliasa.

get_extra_info(v: str) Any#

Lekér további információt az adatfolyamról, amelyet a v ad meg. A v érvényes értékei: peername.

close() None#

Lezárja az adatfolyamot.

wait_closed() None#

Megvárja, amíg az adatfolyam lezárul.

Ez egy korutin.

read(n: int = -1) bytes#

Legfeljebb n bájtot olvas, és visszaadja őket. Ha az n nincs megadva vagy -1, akkor minden bájtot beolvas EOF-ig. A visszaadott érték üres bytes objektum lesz, ha EOF következik be, mielőtt bármilyen bájtot beolvasna.

Ez egy korutin.

readinto(buf: bytearray | memoryview) int#

Legfeljebb n bájtot olvas a buf objektumba, ahol n a buf hosszával egyenlő.

Visszaadja a buf objektumba beolvasott bájtok számát.

Ez egy korutin, és egyben MicroPython-bővítmény.

readexactly(n: int) bytes#

Pontosan n bájtot olvas, és bytes objektumként adja vissza őket.

EOFError kivételt vált ki, ha az adatfolyam véget ér, mielőtt n bájtot beolvasna.

Ez egy korutin.

readline() bytes#

Beolvas egy sort, és visszaadja.

Ez egy korutin.

write(buf: bytes) None#

Hozzáfűzi a buf tartalmát a kimeneti pufferhez. Az adatok csak akkor lesznek kiürítve, amikor a Stream.drain() metódust meghívják. Ajánlott a Stream.drain() metódust közvetlenül e függvény meghívása után hívni.

drain() None#

Kiüríti (kiírja) az összes pufferelt kimeneti adatot az adatfolyamba.

Ez egy korutin.

class asyncio.Server#

Ez a start_server() által visszaadott szerverosztályt képviseli. Használható async with utasításban a szerver kilépéskor történő lezárásához.

close() None#

Lezárja a szervert.

wait_closed() None#

Megvárja, amíg a szerver lezárul.

Ez egy korutin.

Eseményhurok#

asyncio.get_event_loop() Loop#

Visszaadja a feladatok ütemezésére és futtatására használt eseményhurkot. Lásd: Loop.

asyncio.new_event_loop() Loop#

Visszaállítja az eseményhurkot, és visszaadja azt.

Megjegyzés: mivel a MicroPython csak egyetlen eseményhurokkal rendelkezik, ez a függvény csupán visszaállítja a hurok állapotát, nem hoz létre újat.

class asyncio.Loop#

Ez azt az objektumot képviseli, amely a feladatokat ütemezi és futtatja. Nem hozható létre, helyette a get_event_loop() függvényt kell használni.

create_task(coro: Coroutine) Task#

Létrehoz egy feladatot a megadott coro korutinból, és visszaadja az új Task objektumot.

run_forever() None#

Futtatja az eseményhurkot, amíg a stop() meghívásra nem kerül.

run_until_complete(awaitable: Awaitable) Any#

Futtatja a megadott awaitable objektumot, amíg be nem fejeződik. Ha az awaitable nem feladat, akkor feladattá alakul.

stop() None#

Leállítja az eseményhurkot.

close() None#

Lezárja az eseményhurkot.

set_exception_handler(handler: Callable) None#

Beállítja a kivételkezelőt, amely akkor lesz meghívva, amikor egy feladat olyan kivételt vált ki, amelyet nem kapnak el. A handler két argumentumot fogadjon: (loop, context).

get_exception_handler() Callable | None#

Lekéri az aktuális kivételkezelőt. Visszaadja a kezelőt, vagy None értéket, ha nincs egyéni kezelő beállítva.

default_exception_handler(context: dict) None#

Az alapértelmezett kivételkezelő, amelyet meghív.

call_exception_handler(context: dict) None#

Meghívja az aktuális kivételkezelőt. A context argumentum változatlanul kerül átadásra, és egy szótár, amely a következő kulcsokat tartalmazza: 'message', 'exception', 'future'.