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ó
Taskobjektumot.
- 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.
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.TimeoutErrorkivételt vált ki: ezt a hívónak kell elkapnia. A feladatasyncio.CancelledErrorkivételt kap, amely figyelmen kívül hagyható, vagy elkaphatótry...exceptvagytry...finallyhaszná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.
class Task¶
- class asyncio.Task¶
Ez az objektum egy korutint csomagol be futó feladattá. A feladatokra az
await taskhaszná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.
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.
- 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.
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.
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 withutasításban is használhatók.
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 egyssl.SSLContextobjektum, ez a kontextus lesz használva a transzport létrehozásához; ha az ssl értékeTrue, akkor egy alapértelmezett kontextus lesz használva.Visszaad egy adatfolyam-párt: egy olvasó és egy író adatfolyamot. Socket-specifikus
OSErrorkivé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.SSLContextobjektum, ez a kontextus lesz használva a transzport létrehozásához.Visszaad egy
Serverobjektumot.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 aStreamWriterennek 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.
- 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.
EOFErrorkivételt vált ki, ha az adatfolyam véget ér, mielőtt n bájtot beolvasna.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 aStream.drain()metódust közvetlenül e függvény meghívása után hívni.
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
Taskobjektumot.
- 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.
- 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).