asyncio — asinkroni I/O planer#

Ovaj modul pruža planer za kooperativni višezadaćni rad namijenjen async/await korutinama, zajedno s primitivima za sinkronizaciju (brave, događaji) i neblokirajuće TCP umrežavanje putem čitača i pisača tokova podataka. Zadaci se izvode istovremeno na jednoj petlji događaja; trenutačno aktivni zadatak vraća kontrolu petlji pomoću await.

Primjer:

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)))

Osnovne funkcije#

asyncio.create_task(coro: Coroutine) Task#

Stvara novi zadatak iz zadane korutine i raspoređuje ga za izvođenje.

Vraća odgovarajući Task objekt.

asyncio.current_task() Task#

Vraća Task objekt povezan s trenutačno aktivnim zadatkom.

asyncio.run(coro: Coroutine) Any#

Stvara novi zadatak iz zadane korutine i izvodi ga dok se ne dovrši.

Vraća vrijednost koju vraća coro.

asyncio.sleep(t: float) None#

Spava t sekundi (može biti decimalni broj).

Ovo je korutina.

asyncio.sleep_ms(t: int) None#

Spava t milisekundi.

Ovo je korutina i MicroPython proširenje.

Dodatne funkcije#

asyncio.wait_for(awaitable: Awaitable, timeout: float) Any#

Čeka da se awaitable dovrši, ali ga otkazuje ako traje dulje od timeout sekundi. Ako awaitable nije zadatak, iz njega će se stvoriti zadatak.

Ako dođe do isteka vremena, otkazuje zadatak i podiže asyncio.TimeoutError: to bi pozivatelj trebao uhvatiti. Zadatak prima asyncio.CancelledError koji se može zanemariti ili uhvatiti pomoću try...except ili try...finally za izvođenje koda za čišćenje.

Vraća povratnu vrijednost awaitable.

Ovo je korutina.

asyncio.wait_for_ms(awaitable: Awaitable, timeout: int) Any#

Slično kao wait_for(), ali je timeout cijeli broj u milisekundama.

Ovo je korutina i MicroPython proširenje.

asyncio.gather(*awaitables, return_exceptions: bool = False) List#

Izvodi sve awaitables istovremeno. Svi awaitables koji nisu zadaci promiču se u zadatke.

Vraća popis povratnih vrijednosti svih awaitables.

Ovo je korutina.

class Task#

class asyncio.Task#

Ovaj objekt omata korutinu u aktivni zadatak. Na zadatke se može čekati pomoću await task, što će pričekati da se zadatak dovrši i vratiti povratnu vrijednost zadatka.

Zadaci se ne bi trebali stvarati izravno, nego se za njihovo stvaranje koristi create_task().

cancel() None#

Otkazuje zadatak ubacivanjem asyncio.CancelledError u njega. Zadatak može zanemariti tu iznimku. Kod za čišćenje može se izvesti hvatanjem iznimke ili pomoću try ... finally.

class Event#

class asyncio.Event#

Stvara novi događaj koji se može koristiti za sinkronizaciju zadataka. Događaji počinju u poništenom stanju.

is_set() bool#

Vraća True ako je događaj postavljen, inače False.

set() None#

Postavlja događaj. Svi zadaci koji čekaju na događaj bit će raspoređeni za izvođenje.

Napomena: Ovo se mora pozvati unutar zadatka. Nije sigurno pozvati to iz IRQ-a, povratnog poziva planera ili druge dretve. Pogledajte ThreadSafeFlag.

clear() None#

Poništava događaj.

wait() None#

Čeka da se događaj postavi. Ako je događaj već postavljen, odmah se vraća.

Ovo je korutina.

class ThreadSafeFlag#

class asyncio.ThreadSafeFlag#

Stvara novu zastavicu koja se može koristiti za sinkronizaciju zadatka s kodom koji se izvodi izvan asyncio petlje, poput drugih dretvi, IRQ-ova ili povratnih poziva planera. Zastavice počinju u poništenom stanju.

set() None#

Postavlja zastavicu. Ako neki zadatak čeka na zastavicu, bit će raspoređen za izvođenje.

clear() None#

Poništava zastavicu. Ovo se može koristiti kako bi se osiguralo da je možda prethodno postavljena zastavica poništena prije čekanja na nju.

wait() None#

Čeka da se zastavica postavi. Ako je zastavica već postavljena, odmah se vraća. Zastavica se automatski poništava nakon povratka iz wait.

Na zastavicu može čekati samo jedan zadatak istovremeno.

Ovo je korutina.

class Lock#

class asyncio.Lock#

Stvara novu bravu koja se može koristiti za koordinaciju zadataka. Brave počinju u otključanom stanju.

Osim dolje navedenih metoda, brave se mogu koristiti u async with naredbi.

locked() bool#

Vraća True ako je brava zaključana, inače False.

acquire() bool#

Čeka da brava bude u otključanom stanju, a zatim je zaključava na atomičan način. Samo jedan zadatak može steći bravu u bilo kojem trenutku.

Ovo je korutina.

release() None#

Otpušta bravu. Ako neki zadaci čekaju na bravu, sljedeći u redu raspoređuje se za izvođenje, a brava ostaje zaključana. U suprotnom, nijedan zadatak ne čeka i brava postaje otključana.

TCP veze tokova podataka#

asyncio.open_connection(host: str, port: int, ssl: ssl.SSLContext | bool | None = None) Tuple[Stream, Stream]#

Otvara TCP vezu prema zadanom host i port. Adresa host razriješit će se pomoću socket.getaddrinfo(), što je trenutačno blokirajući poziv. Ako je ssl objekt ssl.SSLContext, taj se kontekst koristi za stvaranje transporta; ako je ssl True, koristi se zadani kontekst.

Vraća par tokova podataka: čitač i pisač. Podići će OSError specifičan za utičnicu ako se host nije mogao razriješiti ili ako se veza nije mogla uspostaviti.

Ovo je korutina.

asyncio.start_server(callback: Callable, host: str, port: int, backlog: int = 5, ssl: ssl.SSLContext | None = None) Server#

Pokreće TCP poslužitelj na zadanom host i port. callback će se pozvati s dolaznim, prihvaćenim vezama te će mu se proslijediti 2 argumenta: čitač i pisač tokova podataka za vezu.

Ako je ssl objekt ssl.SSLContext, taj se kontekst koristi za stvaranje transporta.

Vraća Server objekt.

Ovo je korutina.

class asyncio.Stream#

Ovo predstavlja TCP vezu toka podataka. Kako bi se smanjila količina koda, ova klasa implementira i čitač i pisač, a i StreamReader i StreamWriter su alias za ovu klasu.

get_extra_info(v: str) Any#

Dohvaća dodatne informacije o toku podataka, zadane putem v. Valjane vrijednosti za v su: peername.

close() None#

Zatvara tok podataka.

wait_closed() None#

Čeka da se tok podataka zatvori.

Ovo je korutina.

read(n: int = -1) bytes#

Čita do n bajtova i vraća ih. Ako n nije naveden ili je -1, čita sve bajtove do EOF-a. Vraćena vrijednost bit će prazan bytes objekt ako se EOF dosegne prije nego što se pročita ijedan bajt.

Ovo je korutina.

readinto(buf: bytearray | memoryview) int#

Čita do n bajtova u buf, pri čemu je n jednak duljini buf.

Vraća broj bajtova pročitanih u buf.

Ovo je korutina i MicroPython proširenje.

readexactly(n: int) bytes#

Čita točno n bajtova i vraća ih kao bytes objekt.

Podiže iznimku EOFError ako tok podataka završi prije čitanja n bajtova.

Ovo je korutina.

readline() bytes#

Čita redak i vraća ga.

Ovo je korutina.

write(buf: bytes) None#

Nakuplja buf u izlazni međuspremnik. Podaci se prazne tek kada se pozove Stream.drain(). Preporučuje se pozvati Stream.drain() odmah nakon poziva ove funkcije.

drain() None#

Prazni (zapisuje) sve međuspremljene izlazne podatke u tok podataka.

Ovo je korutina.

class asyncio.Server#

Ovo predstavlja klasu poslužitelja koju vraća start_server(). Može se koristiti u async with naredbi za zatvaranje poslužitelja pri izlazu.

close() None#

Zatvara poslužitelj.

wait_closed() None#

Čeka da se poslužitelj zatvori.

Ovo je korutina.

Petlja događaja#

asyncio.get_event_loop() Loop#

Vraća petlju događaja koja se koristi za raspoređivanje i izvođenje zadataka. Pogledajte Loop.

asyncio.new_event_loop() Loop#

Ponovno postavlja petlju događaja i vraća je.

Napomena: budući da MicroPython ima samo jednu petlju događaja, ova funkcija samo ponovno postavlja stanje petlje, ne stvara novu.

class asyncio.Loop#

Ovo predstavlja objekt koji raspoređuje i izvodi zadatke. Ne može se stvoriti, umjesto toga koristite get_event_loop().

create_task(coro: Coroutine) Task#

Stvara zadatak iz zadanog coro i vraća novi Task objekt.

run_forever() None#

Izvodi petlju događaja dok se ne pozove stop().

run_until_complete(awaitable: Awaitable) Any#

Izvodi zadani awaitable dok se ne dovrši. Ako awaitable nije zadatak, promaknut će se u zadatak.

stop() None#

Zaustavlja petlju događaja.

close() None#

Zatvara petlju događaja.

set_exception_handler(handler: Callable) None#

Postavlja rukovatelja iznimkama koji se poziva kada zadatak podigne iznimku koja nije uhvaćena. handler bi trebao prihvaćati dva argumenta: (loop, context).

get_exception_handler() Callable | None#

Dohvaća trenutačnog rukovatelja iznimkama. Vraća rukovatelja ili None ako prilagođeni rukovatelj nije postavljen.

default_exception_handler(context: dict) None#

Zadani rukovatelj iznimkama koji se poziva.

call_exception_handler(context: dict) None#

Poziva trenutačnog rukovatelja iznimkama. Argument context prosljeđuje se kroz i predstavlja rječnik koji sadrži ključeve: 'message', 'exception', 'future'.