asyncio — asynkron I/O-schemaläggare¶
Denna modul tillhandahåller en schemaläggare för kooperativ multikörning av async/await-koroutiner, tillsammans med primitiver för synkronisering (lås, händelser) och icke-blockerande TCP-nätverk via strömläsare och strömskrivare. Uppgifter körs samtidigt på en enda händelseslinga; den uppgift som körs just nu lämnar tillbaka kontrollen till slingan med await.
Exempel:
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)))
Kärnfunktioner¶
- asyncio.create_task(coro: Coroutine) Task¶
Skapa en ny uppgift från den angivna koroutinen och schemalägg den för körning.
Returnerar motsvarande
Task-objekt.
- asyncio.run(coro: Coroutine) Any¶
Skapa en ny uppgift från den angivna koroutinen och kör den tills den är klar.
Returnerar värdet som returneras av coro.
Ytterligare funktioner¶
- asyncio.wait_for(awaitable: Awaitable, timeout: float) Any¶
Vänta på att awaitable ska bli klar, men avbryt den om den tar längre tid än timeout sekunder. Om awaitable inte är en uppgift kommer en uppgift att skapas från den.
Om en tidsgräns överskrids avbryts uppgiften och
asyncio.TimeoutErrorutlöses: detta bör fångas av anroparen. Uppgiften tar emotasyncio.CancelledErrorsom kan ignoreras eller fångas medtry...exceptellertry...finallyför att köra uppstädningskod.Returnerar returvärdet för awaitable.
Detta är en koroutin.
- asyncio.wait_for_ms(awaitable: Awaitable, timeout: int) Any¶
Liknar
wait_for()men timeout är ett heltal i millisekunder.Detta är en koroutin och en MicroPython-utökning.
class Task¶
- class asyncio.Task¶
Detta objekt kapslar in en koroutin i en körande uppgift. Uppgifter kan väntas på med
await task, vilket väntar på att uppgiften ska bli klar och returnerar uppgiftens returvärde.Uppgifter bör inte skapas direkt, använd istället
create_task()för att skapa dem.
class Event¶
- class asyncio.Event¶
Skapa en ny händelse som kan användas för att synkronisera uppgifter. Händelser startar i det rensade tillståndet.
- set() None¶
Sätt händelsen. Alla uppgifter som väntar på händelsen schemaläggs för körning.
Obs: Detta måste anropas inifrån en uppgift. Det är inte säkert att anropa detta från ett IRQ, ett schemaläggar-återanrop eller en annan tråd. Se
ThreadSafeFlag.
class ThreadSafeFlag¶
- class asyncio.ThreadSafeFlag¶
Skapa en ny flagga som kan användas för att synkronisera en uppgift med kod som körs utanför asyncio-slingan, såsom andra trådar, IRQ:er eller schemaläggar-återanrop. Flaggor startar i det rensade tillståndet.
- set() None¶
Sätt flaggan. Om det finns en uppgift som väntar på flaggan schemaläggs den för körning.
class Lock¶
- class asyncio.Lock¶
Skapa ett nytt lås som kan användas för att koordinera uppgifter. Lås startar i det olåsta tillståndet.
Förutom metoderna nedan kan lås användas i en
async with-sats.
TCP-strömanslutningar¶
- asyncio.open_connection(host: str, port: int, ssl: ssl.SSLContext | bool | None = None) Tuple[Stream, Stream]¶
Öppna en TCP-anslutning till den angivna host och port. Adressen host kommer att slås upp med
socket.getaddrinfo(), vilket för närvarande är ett blockerande anrop. Om ssl är ettssl.SSLContext-objekt används denna kontext för att skapa transporten; om ssl ärTrueanvänds en standardkontext.Returnerar ett par strömmar: en läsarström och en skrivarström. Utlöser ett socket-specifikt
OSErrorom värden inte kunde slås upp eller om anslutningen inte kunde upprättas.Detta är en koroutin.
- asyncio.start_server(callback: Callable, host: str, port: int, backlog: int = 5, ssl: ssl.SSLContext | None = None) Server¶
Starta en TCP-server på den angivna host och port. callback kommer att anropas med inkommande, accepterade anslutningar och tar emot 2 argument: läsar- och skrivarströmmar för anslutningen.
Om ssl är ett
ssl.SSLContext-objekt används denna kontext för att skapa transporten.Returnerar ett
Server-objekt.Detta är en koroutin.
- class asyncio.Stream¶
Detta representerar en TCP-strömanslutning. För att minimera kod implementerar denna klass både en läsare och en skrivare, och både
StreamReaderochStreamWriterär alias för denna klass.- get_extra_info(v: str) Any¶
Hämta extra information om strömmen, given av v. De giltiga värdena för v är:
peername.
- read(n: int = -1) bytes¶
Läs upp till n byte och returnera dem. Om n inte anges eller är -1 läses alla byte fram till EOF. Det returnerade värdet blir ett tomt bytes-objekt om EOF påträffas innan några byte har lästs.
Detta är en koroutin.
- readinto(buf: bytearray | memoryview) int¶
Läs upp till n byte in i buf där n är lika med längden på buf.
Returnerar antalet byte som lästs in i buf.
Detta är en koroutin och en MicroPython-utökning.
- readexactly(n: int) bytes¶
Läs exakt n byte och returnera dem som ett bytes-objekt.
Utlöser ett
EOFError-undantag om strömmen tar slut innan n byte har lästs.Detta är en koroutin.
- write(buf: bytes) None¶
Lägg till buf i utgångsbufferten. Datan töms först när
Stream.drain()anropas. Det rekommenderas att anropaStream.drain()omedelbart efter anrop av denna funktion.
Händelseslinga¶
- asyncio.get_event_loop() Loop¶
Returnerar händelseslingan som används för att schemalägga och köra uppgifter. Se
Loop.
- asyncio.new_event_loop() Loop¶
Återställ händelseslingan och returnera den.
Obs: eftersom MicroPython endast har en enda händelseslinga återställer denna funktion bara slingans tillstånd, den skapar inte en ny.
- class asyncio.Loop¶
Detta representerar objektet som schemalägger och kör uppgifter. Det kan inte skapas, använd
get_event_loop()istället.- create_task(coro: Coroutine) Task¶
Skapa en uppgift från den angivna coro och returnera det nya
Task-objektet.
- run_until_complete(awaitable: Awaitable) Any¶
Kör den angivna awaitable tills den är klar. Om awaitable inte är en uppgift kommer den att befordras till en.
- set_exception_handler(handler: Callable) None¶
Ange undantagshanteraren som ska anropas när en Task utlöser ett undantag som inte fångas. handler bör ta emot två argument:
(loop, context).