asyncio — asynchronní I/O plánovač¶
Tento modul poskytuje plánovač pro kooperativní multitasking pro async/await korutiny, spolu s primitivy pro synchronizaci (zámky, události) a neblokující TCP síťování prostřednictvím proudových čtecích a zapisovacích objektů. Úlohy jsou spouštěny souběžně na jediné smyčce událostí; aktuálně běžící úloha vrací řízení zpět smyčce pomocí await.
Příklad:
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)))
Základní funkce¶
- asyncio.create_task(coro: Coroutine) Task¶
Vytvoří novou úlohu z dané korutiny a naplánuje její spuštění.
Vrátí odpovídající objekt
Task.
- asyncio.run(coro: Coroutine) Any¶
Vytvoří novou úlohu z dané korutiny a spustí ji, dokud se nedokončí.
Vrátí hodnotu vrácenou coro.
Doplňkové funkce¶
- asyncio.wait_for(awaitable: Awaitable, timeout: float) Any¶
Čeká na dokončení awaitable, ale zruší jej, pokud trvá déle než timeout sekund. Pokud awaitable není úloha, bude z něj úloha vytvořena.
Pokud dojde k vypršení časového limitu, úloha je zrušena a vyvolá se
asyncio.TimeoutError: ten by měl být zachycen volajícím. Úloha obdržíasyncio.CancelledError, který lze ignorovat nebo zachytit pomocítry...exceptnebotry...finallypro spuštění úklidového kódu.Vrátí návratovou hodnotu awaitable.
Toto je korutina.
- asyncio.wait_for_ms(awaitable: Awaitable, timeout: int) Any¶
Podobné jako
wait_for(), ale timeout je celé číslo v milisekundách.Toto je korutina a rozšíření MicroPythonu.
class Task¶
- class asyncio.Task¶
Tento objekt obaluje korutinu do běžící úlohy. Na úlohy lze čekat pomocí
await task, což počká na dokončení úlohy a vrátí její návratovou hodnotu.Úlohy by neměly být vytvářeny přímo, místo toho použijte k jejich vytvoření
create_task().
class Event¶
- class asyncio.Event¶
Vytvoří novou událost, kterou lze použít k synchronizaci úloh. Události začínají ve vymazaném stavu.
- set() None¶
Nastaví událost. Všechny úlohy čekající na událost budou naplánovány ke spuštění.
Poznámka: Toto musí být voláno z úlohy. Není bezpečné volat to z IRQ, callbacku plánovače nebo jiného vlákna. Viz
ThreadSafeFlag.
class ThreadSafeFlag¶
- class asyncio.ThreadSafeFlag¶
Vytvoří nový příznak, který lze použít k synchronizaci úlohy s kódem běžícím mimo asyncio smyčku, jako jsou jiná vlákna, IRQ nebo callbacky plánovače. Příznaky začínají ve vymazaném stavu.
class Lock¶
- class asyncio.Lock¶
Vytvoří nový zámek, který lze použít ke koordinaci úloh. Zámky začínají v odemčeném stavu.
Kromě níže uvedených metod lze zámky použít v příkazu
async with.
TCP proudová spojení¶
- asyncio.open_connection(host: str, port: int, ssl: ssl.SSLContext | bool | None = None) Tuple[Stream, Stream]¶
Otevře TCP spojení k danému host a port. Adresa host bude přeložena pomocí
socket.getaddrinfo(), což je v současnosti blokující volání. Pokud je ssl objektemssl.SSLContext, je tento kontext použit k vytvoření transportu; pokud je sslTrue, použije se výchozí kontext.Vrátí dvojici proudů: čtecí a zapisovací proud. Vyvolá
OSErrorspecifický pro socket, pokud nebylo možné host přeložit nebo pokud nebylo možné navázat spojení.Toto je korutina.
- asyncio.start_server(callback: Callable, host: str, port: int, backlog: int = 5, ssl: ssl.SSLContext | None = None) Server¶
Spustí TCP server na daném host a port. callback bude volán s příchozími, přijatými spojeními a budou mu předány 2 argumenty: čtecí a zapisovací proud pro spojení.
Pokud je ssl objektem
ssl.SSLContext, je tento kontext použit k vytvoření transportu.Vrátí objekt
Server.Toto je korutina.
- class asyncio.Stream¶
Toto představuje TCP proudové spojení. Aby se minimalizoval kód, tato třída implementuje jak čtecí, tak zapisovací objekt a jak
StreamReader, takStreamWriterjsou aliasy na tuto třídu.- get_extra_info(v: str) Any¶
Získá dodatečné informace o proudu zadané pomocí v. Platné hodnoty pro v jsou:
peername.
- read(n: int = -1) bytes¶
Přečte až n bajtů a vrátí je. Pokud n není zadáno nebo je -1, přečte všechny bajty až do EOF. Vrácená hodnota bude prázdný objekt bytes, pokud je EOF dosaženo před přečtením jakýchkoli bajtů.
Toto je korutina.
- readinto(buf: bytearray | memoryview) int¶
Přečte až n bajtů do buf, přičemž n je rovno délce buf.
Vrátí počet bajtů přečtených do buf.
Toto je korutina a rozšíření MicroPythonu.
- readexactly(n: int) bytes¶
Přečte přesně n bajtů a vrátí je jako objekt bytes.
Vyvolá výjimku
EOFError, pokud proud skončí před přečtením n bajtů.Toto je korutina.
- write(buf: bytes) None¶
Připojí buf do výstupního bufferu. Data jsou vyprázdněna teprve při volání
Stream.drain(). Doporučuje se zavolatStream.drain()ihned po volání této funkce.
Smyčka událostí¶
- asyncio.get_event_loop() Loop¶
Vrátí smyčku událostí používanou k plánování a spouštění úloh. Viz
Loop.
- asyncio.new_event_loop() Loop¶
Resetuje smyčku událostí a vrátí ji.
Poznámka: protože MicroPython má pouze jedinou smyčku událostí, tato funkce pouze resetuje stav smyčky, nevytváří novou.
- class asyncio.Loop¶
Toto představuje objekt, který plánuje a spouští úlohy. Nelze jej vytvořit, místo toho použijte
get_event_loop().- run_until_complete(awaitable: Awaitable) Any¶
Spustí dané awaitable, dokud se nedokončí. Pokud awaitable není úloha, bude na úlohu povýšeno.
- set_exception_handler(handler: Callable) None¶
Nastaví obslužnou rutinu výjimek, která se má zavolat, když úloha vyvolá nezachycenou výjimku. handler by měl přijímat dva argumenty:
(loop, context).