asyncio — asynchrone I/O-scheduler¶
Deze module biedt een coöperatieve multitasking-scheduler voor async/await-coroutines, samen met primitieven voor synchronisatie (locks, events) en niet-blokkerend TCP-netwerken via stream readers en writers. Taken worden gelijktijdig uitgevoerd op één enkele event loop; de momenteel uitgevoerde taak geeft de controle met await terug aan de loop.
Voorbeeld:
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)))
Kernfuncties¶
- asyncio.create_task(coro: Coroutine) Task¶
Maak een nieuwe taak van de gegeven coroutine en plan deze om uitgevoerd te worden.
Retourneert het bijbehorende
Task-object.
- asyncio.current_task() Task¶
Retourneert het
Task-object dat is gekoppeld aan de momenteel uitgevoerde taak.
- asyncio.run(coro: Coroutine) Any¶
Maak een nieuwe taak van de gegeven coroutine en voer deze uit totdat ze voltooid is.
Retourneert de waarde die door coro wordt teruggegeven.
Aanvullende functies¶
- asyncio.wait_for(awaitable: Awaitable, timeout: float) Any¶
Wacht totdat de awaitable voltooid is, maar annuleer deze als ze langer dan timeout seconden duurt. Als awaitable geen taak is, wordt er een taak van gemaakt.
Als er een timeout optreedt, wordt de taak geannuleerd en wordt
asyncio.TimeoutErroropgeworpen: dit moet door de aanroeper worden opgevangen. De taak ontvangtasyncio.CancelledError, die genegeerd kan worden of opgevangen kan worden mettry...exceptoftry...finallyom opruimcode uit te voeren.Retourneert de retourwaarde van awaitable.
Dit is een coroutine.
- asyncio.wait_for_ms(awaitable: Awaitable, timeout: int) Any¶
Vergelijkbaar met
wait_for(), maar timeout is een geheel getal in milliseconden.Dit is een coroutine en een MicroPython-uitbreiding.
class Task¶
- class asyncio.Task¶
Dit object verpakt een coroutine in een uitgevoerde taak. Op taken kan worden gewacht met
await task, wat wacht totdat de taak voltooid is en de retourwaarde van de taak teruggeeft.Taken mogen niet rechtstreeks worden aangemaakt; gebruik in plaats daarvan
create_task()om ze aan te maken.
class Event¶
- class asyncio.Event¶
Maak een nieuw event aan dat gebruikt kan worden om taken te synchroniseren. Events beginnen in de gewiste toestand.
- set() None¶
Stel het event in. Alle taken die op het event wachten, worden gepland om uitgevoerd te worden.
Opmerking: dit moet vanuit een taak worden aangeroepen. Het is niet veilig om dit aan te roepen vanuit een IRQ, scheduler-callback of een andere thread. Zie
ThreadSafeFlag.
class ThreadSafeFlag¶
- class asyncio.ThreadSafeFlag¶
Maak een nieuwe vlag aan die gebruikt kan worden om een taak te synchroniseren met code die buiten de asyncio-loop draait, zoals andere threads, IRQ’s of scheduler-callbacks. Vlaggen beginnen in de gewiste toestand.
- set() None¶
Stel de vlag in. Als er een taak op de vlag wacht, wordt deze gepland om uitgevoerd te worden.
class Lock¶
- class asyncio.Lock¶
Maak een nieuwe lock aan die gebruikt kan worden om taken te coördineren. Locks beginnen in de ontgrendelde toestand.
Naast de onderstaande methoden kunnen locks gebruikt worden in een
async with-statement.
TCP-streamverbindingen¶
- asyncio.open_connection(host: str, port: int, ssl: ssl.SSLContext | bool | None = None) Tuple[Stream, Stream]¶
Open een TCP-verbinding naar de gegeven host en port. Het host-adres wordt opgelost met
socket.getaddrinfo(), wat momenteel een blokkerende aanroep is. Als ssl eenssl.SSLContext-object is, wordt deze context gebruikt om het transport aan te maken; als sslTrueis, wordt een standaardcontext gebruikt.Retourneert een paar streams: een reader- en een writer-stream. Werpt een socketspecifieke
OSErrorop als de host niet opgelost kon worden of als de verbinding niet tot stand gebracht kon worden.Dit is een coroutine.
- asyncio.start_server(callback: Callable, host: str, port: int, backlog: int = 5, ssl: ssl.SSLContext | None = None) Server¶
Start een TCP-server op de gegeven host en port. De callback wordt aangeroepen bij inkomende, geaccepteerde verbindingen en krijgt 2 argumenten doorgegeven: reader- en writer-streams voor de verbinding.
Als ssl een
ssl.SSLContext-object is, wordt deze context gebruikt om het transport aan te maken.Retourneert een
Server-object.Dit is een coroutine.
- class asyncio.Stream¶
Dit vertegenwoordigt een TCP-streamverbinding. Om code te minimaliseren implementeert deze klasse zowel een reader als een writer, en zowel
StreamReaderalsStreamWriterzijn aliassen voor deze klasse.- get_extra_info(v: str) Any¶
Verkrijg extra informatie over de stream, gegeven door v. De geldige waarden voor v zijn:
peername.
- read(n: int = -1) bytes¶
Lees maximaal n bytes en retourneer deze. Als n niet wordt opgegeven of -1 is, lees dan alle bytes tot EOF. De geretourneerde waarde is een leeg bytes-object als EOF wordt aangetroffen voordat er bytes zijn gelezen.
Dit is een coroutine.
- readinto(buf: bytearray | memoryview) int¶
Lees maximaal n bytes in buf, waarbij n gelijk is aan de lengte van buf.
Retourneert het aantal bytes dat in buf is gelezen.
Dit is een coroutine en een MicroPython-uitbreiding.
- readexactly(n: int) bytes¶
Lees precies n bytes en retourneer deze als een bytes-object.
Werpt een
EOFError-uitzondering op als de stream eindigt voordat n bytes zijn gelezen.Dit is een coroutine.
- write(buf: bytes) None¶
Voeg buf toe aan de uitvoerbuffer. De data wordt pas weggeschreven wanneer
Stream.drain()wordt aangeroepen. Het wordt aanbevolen omStream.drain()onmiddellijk na het aanroepen van deze functie aan te roepen.
- class asyncio.Server¶
Dit vertegenwoordigt de serverklasse die door
start_server()wordt geretourneerd. Deze kan gebruikt worden in eenasync with-statement om de server bij het verlaten te sluiten.
Event Loop¶
- asyncio.get_event_loop() Loop¶
Retourneert de event loop die gebruikt wordt om taken te plannen en uit te voeren. Zie
Loop.
- asyncio.new_event_loop() Loop¶
Zet de event loop terug en retourneer deze.
Opmerking: aangezien MicroPython slechts één enkele event loop heeft, zet deze functie alleen de toestand van de loop terug; er wordt geen nieuwe aangemaakt.
- class asyncio.Loop¶
Dit vertegenwoordigt het object dat taken plant en uitvoert. Het kan niet aangemaakt worden; gebruik in plaats daarvan
get_event_loop().- create_task(coro: Coroutine) Task¶
Maak een taak van de gegeven coro en retourneer het nieuwe
Task-object.
- run_until_complete(awaitable: Awaitable) Any¶
Voer de gegeven awaitable uit totdat deze voltooid is. Als awaitable geen taak is, wordt deze tot een taak bevorderd.
- set_exception_handler(handler: Callable) None¶
Stel de exception handler in die aangeroepen moet worden wanneer een taak een uitzondering opwerpt die niet wordt opgevangen. De handler moet twee argumenten accepteren:
(loop, context).
- get_exception_handler() Callable | None¶
Verkrijg de huidige exception handler. Retourneert de handler, of
Noneals er geen aangepaste handler is ingesteld.