asyncio — ordonnanceur d’entrées/sorties asynchrones¶
Ce module fournit un ordonnanceur multitâche coopératif pour les coroutines async/await, ainsi que des primitives de synchronisation (verrous, événements) et la mise en réseau TCP non bloquante via des lecteurs et écrivains de flux. Les tâches s’exécutent simultanément sur une unique boucle d’événements ; la tâche en cours d’exécution rend le contrôle à la boucle avec await.
Exemple
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)))
Fonctions principales¶
- asyncio.create_task(coro: Coroutine) Task¶
Crée une nouvelle tâche à partir de la coroutine donnée et la planifie pour exécution.
Renvoie l’objet
Taskcorrespondant.
- asyncio.run(coro: Coroutine) Any¶
Crée une nouvelle tâche à partir de la coroutine donnée et l’exécute jusqu’à son achèvement.
Renvoie la valeur renvoyée par coro.
Fonctions supplémentaires¶
- asyncio.wait_for(awaitable: Awaitable, timeout: float) Any¶
Attend que l”awaitable se termine, mais l’annule s’il prend plus de timeout secondes. Si l”awaitable n’est pas une tâche, une tâche en sera créée.
En cas de dépassement de délai, la tâche est annulée et une
asyncio.TimeoutErrorest levée : celle-ci doit être interceptée par l’appelant. La tâche reçoitasyncio.CancelledErrorqui peut être ignorée ou interceptée à l’aide detry...exceptoutry...finallypour exécuter du code de nettoyage.Renvoie la valeur de retour de l”awaitable.
Ceci est une coroutine.
- asyncio.wait_for_ms(awaitable: Awaitable, timeout: int) Any¶
Similaire à
wait_for()mais timeout est un entier en millisecondes.Ceci est une coroutine, ainsi qu’une extension MicroPython.
class Task¶
- class asyncio.Task¶
Cet objet encapsule une coroutine dans une tâche en cours d’exécution. Il est possible d’attendre les tâches avec
await task, ce qui attendra l’achèvement de la tâche et renverra sa valeur de retour.Les tâches ne doivent pas être créées directement ; utilisez plutôt
create_task()pour les créer.
class Event¶
- class asyncio.Event¶
Crée un nouvel événement pouvant servir à synchroniser des tâches. Les événements démarrent à l’état effacé.
- set() None¶
Positionne l’événement. Toutes les tâches en attente de l’événement seront planifiées pour exécution.
Remarque : ceci doit être appelé depuis une tâche. Il n’est pas sûr de l’appeler depuis une IRQ, une fonction de rappel de l’ordonnanceur ou un autre fil d’exécution. Voir
ThreadSafeFlag.
class ThreadSafeFlag¶
- class asyncio.ThreadSafeFlag¶
Crée un nouveau drapeau pouvant servir à synchroniser une tâche avec du code s’exécutant en dehors de la boucle asyncio, tel que d’autres fils d’exécution, des IRQ ou des fonctions de rappel de l’ordonnanceur. Les drapeaux démarrent à l’état effacé.
- set() None¶
Positionne le drapeau. Si une tâche est en attente du drapeau, elle sera planifiée pour exécution.
class Lock¶
- class asyncio.Lock¶
Crée un nouveau verrou pouvant servir à coordonner des tâches. Les verrous démarrent à l’état déverrouillé.
En plus des méthodes ci-dessous, les verrous peuvent être utilisés dans une instruction
async with.
Connexions de flux TCP¶
- asyncio.open_connection(host: str, port: int, ssl: ssl.SSLContext | bool | None = None) Tuple[Stream, Stream]¶
Ouvre une connexion TCP vers le host et le port donnés. L’adresse host sera résolue à l’aide de
socket.getaddrinfo(), qui est actuellement un appel bloquant. Si ssl est un objetssl.SSLContext, ce contexte est utilisé pour créer le transport ; si ssl vautTrue, un contexte par défaut est utilisé.Renvoie une paire de flux : un flux lecteur et un flux écrivain. Lève une
OSErrorspécifique à la socket si l’hôte n’a pas pu être résolu ou si la connexion n’a pas pu être établie.Ceci est une coroutine.
- asyncio.start_server(callback: Callable, host: str, port: int, backlog: int = 5, ssl: ssl.SSLContext | None = None) Server¶
Démarre un serveur TCP sur le host et le port donnés. Le callback sera appelé pour les connexions entrantes acceptées, et recevra 2 arguments : les flux lecteur et écrivain de la connexion.
Si ssl est un objet
ssl.SSLContext, ce contexte est utilisé pour créer le transport.Renvoie un objet
Server.Ceci est une coroutine.
- class asyncio.Stream¶
Ceci représente une connexion de flux TCP. Pour minimiser le code, cette classe implémente à la fois un lecteur et un écrivain, et
StreamReaderetStreamWritersont tous deux des alias de cette classe.- get_extra_info(v: str) Any¶
Obtient des informations supplémentaires sur le flux, indiquées par v. Les valeurs valides pour v sont :
peername.
- read(n: int = -1) bytes¶
Lit jusqu’à n octets et les renvoie. Si n n’est pas fourni ou vaut -1, lit tous les octets jusqu’à EOF. La valeur renvoyée sera un objet bytes vide si EOF est rencontré avant qu’aucun octet n’ait été lu.
Ceci est une coroutine.
- readinto(buf: bytearray | memoryview) int¶
Lit jusqu’à n octets dans buf, n étant égal à la longueur de buf.
Renvoie le nombre d’octets lus dans buf.
Ceci est une coroutine, ainsi qu’une extension MicroPython.
- readexactly(n: int) bytes¶
Lit exactement n octets et les renvoie sous forme d’objet bytes.
Lève une exception
EOFErrorsi le flux se termine avant la lecture de n octets.Ceci est une coroutine.
- write(buf: bytes) None¶
Accumule buf dans le tampon de sortie. Les données ne sont vidées que lorsque
Stream.drain()est appelée. Il est recommandé d’appelerStream.drain()immédiatement après l’appel de cette fonction.
Boucle d’événements¶
- asyncio.get_event_loop() Loop¶
Renvoie la boucle d’événements utilisée pour planifier et exécuter les tâches. Voir
Loop.
- asyncio.new_event_loop() Loop¶
Réinitialise la boucle d’événements et la renvoie.
Remarque : étant donné que MicroPython ne possède qu’une seule boucle d’événements, cette fonction réinitialise uniquement l’état de la boucle, elle n’en crée pas de nouvelle.
- class asyncio.Loop¶
Ceci représente l’objet qui planifie et exécute les tâches. Il ne peut pas être créé ; utilisez
get_event_loop()à la place.- create_task(coro: Coroutine) Task¶
Crée une tâche à partir du coro donné et renvoie le nouvel objet
Task.
- run_until_complete(awaitable: Awaitable) Any¶
Exécute l”awaitable donné jusqu’à son achèvement. Si l”awaitable n’est pas une tâche, il sera promu en tâche.
- set_exception_handler(handler: Callable) None¶
Définit le gestionnaire d’exceptions à appeler lorsqu’une tâche lève une exception qui n’est pas interceptée. Le handler doit accepter deux arguments :
(loop, context).
- get_exception_handler() Callable | None¶
Obtient le gestionnaire d’exceptions actuel. Renvoie le gestionnaire, ou
Nonesi aucun gestionnaire personnalisé n’est défini.