asyncio — asynkroninen I/O-ajastin

Tämä moduuli tarjoaa yhteistoiminnallisen moniajon ajastimen async/await-korutiineille sekä primitiivit synkronointia (lukot, tapahtumat) ja estämätöntä TCP-verkkoliikennettä varten virtalukijoiden ja -kirjoittajien kautta. Tehtävät suoritetaan rinnakkain yhdessä tapahtumasilmukassa; parhaillaan suoritettava tehtävä luovuttaa hallinnan takaisin silmukalle komennolla await.

Esimerkki:

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

Ydintoiminnot

asyncio.create_task(coro: Coroutine) Task

Luo uusi tehtävä annetusta korutiinista ja ajasta se suoritettavaksi.

Palauttaa vastaavan Task-objektin.

asyncio.current_task() Task

Palauttaa parhaillaan suoritettavaan tehtävään liittyvän Task-objektin.

asyncio.run(coro: Coroutine) Any

Luo uusi tehtävä annetusta korutiinista ja suorita se valmistumiseen asti.

Palauttaa arvon, jonka coro palauttaa.

asyncio.sleep(t: float) None

Nuku t sekuntia (voi olla liukuluku).

Tämä on korutiini.

asyncio.sleep_ms(t: int) None

Nuku t millisekuntia.

Tämä on korutiini ja MicroPython-laajennus.

Lisätoiminnot

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

Odota awaitable-objektin valmistumista, mutta peruuta se, jos se kestää kauemmin kuin timeout sekuntia. Jos awaitable ei ole tehtävä, siitä luodaan tehtävä.

Jos aikakatkaisu tapahtuu, tehtävä peruutetaan ja nostetaan poikkeus asyncio.TimeoutError: kutsujan tulisi napata tämä. Tehtävä saa poikkeuksen asyncio.CancelledError, joka voidaan jättää huomiotta tai napata käyttäen try...except- tai try...finally-rakennetta puhdistuskoodin suorittamiseksi.

Palauttaa awaitable-objektin palautusarvon.

Tämä on korutiini.

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

Vastaa funktiota wait_for(), mutta timeout on kokonaisluku millisekunteina.

Tämä on korutiini ja MicroPython-laajennus.

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

Suorita kaikki awaitables rinnakkain. Kaikki awaitables, jotka eivät ole tehtäviä, korotetaan tehtäviksi.

Palauttaa listan kaikkien awaitables-objektien palautusarvoista.

Tämä on korutiini.

class Task

class asyncio.Task

Tämä objekti kääräisee korutiinin suoritettavaksi tehtäväksi. Tehtäviä voidaan odottaa käyttäen await task, joka odottaa tehtävän valmistumista ja palauttaa tehtävän palautusarvon.

Tehtäviä ei tulisi luoda suoraan, vaan käyttää niiden luomiseen funktiota create_task().

cancel() None

Peruuta tehtävä syöttämällä siihen poikkeus asyncio.CancelledError. Tehtävä voi jättää tämän poikkeuksen huomiotta. Puhdistuskoodi voidaan suorittaa nappaamalla se tai try ... finally-rakenteen kautta.

class Event

class asyncio.Event

Luo uusi tapahtuma, jota voidaan käyttää tehtävien synkronointiin. Tapahtumat alkavat tyhjennetyssä tilassa.

is_set() bool

Palauttaa True, jos tapahtuma on asetettu, muuten False.

set() None

Aseta tapahtuma. Kaikki tapahtumaa odottavat tehtävät ajastetaan suoritettaviksi.

Huomautus: Tätä on kutsuttava tehtävän sisältä. Tämän kutsuminen IRQ:sta, ajastimen takaisinkutsusta tai muusta säikeestä ei ole turvallista. Katso ThreadSafeFlag.

clear() None

Tyhjennä tapahtuma.

wait() None

Odota, että tapahtuma asetetaan. Jos tapahtuma on jo asetettu, palaa välittömästi.

Tämä on korutiini.

class ThreadSafeFlag

class asyncio.ThreadSafeFlag

Luo uusi lippu, jota voidaan käyttää tehtävän synkronointiin asyncio-silmukan ulkopuolella suoritettavan koodin kanssa, kuten muiden säikeiden, IRQ:iden tai ajastimen takaisinkutsujen kanssa. Liput alkavat tyhjennetyssä tilassa.

set() None

Aseta lippu. Jos jokin tehtävä odottaa lippua, se ajastetaan suoritettavaksi.

clear() None

Tyhjennä lippu. Tätä voidaan käyttää varmistamaan, että mahdollisesti aiemmin asetettu lippu on tyhjä ennen sen odottamista.

wait() None

Odota, että lippu asetetaan. Jos lippu on jo asetettu, palaa välittömästi. Lippu nollataan automaattisesti, kun wait palaa.

Lippua voi odottaa vain yksi tehtävä kerrallaan.

Tämä on korutiini.

class Lock

class asyncio.Lock

Luo uusi lukko, jota voidaan käyttää tehtävien koordinointiin. Lukot alkavat lukitsemattomassa tilassa.

Alla olevien metodien lisäksi lukkoja voidaan käyttää async with-lauseessa.

locked() bool

Palauttaa True, jos lukko on lukittu, muuten False.

acquire() bool

Odota, että lukko on lukitsemattomassa tilassa, ja lukitse se sitten atomisella tavalla. Vain yksi tehtävä voi varata lukon kerrallaan.

Tämä on korutiini.

release() None

Vapauta lukko. Jos jokin tehtävä odottaa lukkoa, jonon seuraava ajastetaan suoritettavaksi ja lukko pysyy lukittuna. Muuten yksikään tehtävä ei odota ja lukko avautuu.

TCP-virtayhteydet

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

Avaa TCP-yhteys annettuun host- ja port-osoitteeseen. host-osoite ratkaistaan käyttäen funktiota socket.getaddrinfo(), joka on tällä hetkellä estävä kutsu. Jos ssl on ssl.SSLContext-objekti, tätä kontekstia käytetään siirron luomiseen; jos ssl on True, käytetään oletuskontekstia.

Palauttaa parin virtoja: lukija- ja kirjoittajavirran. Nostaa socket-kohtaisen poikkeuksen OSError, jos isäntää ei voitu ratkaista tai jos yhteyttä ei voitu muodostaa.

Tämä on korutiini.

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

Käynnistä TCP-palvelin annetussa host- ja port-osoitteessa. callback-funktiota kutsutaan saapuvien, hyväksyttyjen yhteyksien kanssa, ja sille välitetään 2 argumenttia: yhteyden lukija- ja kirjoittajavirta.

Jos ssl on ssl.SSLContext-objekti, tätä kontekstia käytetään siirron luomiseen.

Palauttaa Server-objektin.

Tämä on korutiini.

class asyncio.Stream

Tämä edustaa TCP-virtayhteyttä. Koodin minimoimiseksi tämä luokka toteuttaa sekä lukijan että kirjoittajan, ja sekä StreamReader että StreamWriter ovat tämän luokan aliaksia.

get_extra_info(v: str) Any

Hae virtaa koskevia lisätietoja, jotka v määrittää. v:n kelvolliset arvot ovat: peername.

close() None

Sulje virta.

wait_closed() None

Odota, että virta sulkeutuu.

Tämä on korutiini.

read(n: int = -1) bytes

Lue korkeintaan n tavua ja palauta ne. Jos n:ää ei anneta tai se on -1, lue kaikki tavut EOF:ään asti. Palautettu arvo on tyhjä bytes-objekti, jos EOF kohdataan ennen kuin yhtään tavua on luettu.

Tämä on korutiini.

readinto(buf: bytearray | memoryview) int

Lue korkeintaan n tavua buf-objektiin, jossa n on yhtä suuri kuin buf:n pituus.

Palauta buf-objektiin luettujen tavujen määrä.

Tämä on korutiini ja MicroPython-laajennus.

readexactly(n: int) bytes

Lue tarkalleen n tavua ja palauta ne bytes-objektina.

Nostaa poikkeuksen EOFError, jos virta päättyy ennen kuin n tavua on luettu.

Tämä on korutiini.

readline() bytes

Lue rivi ja palauta se.

Tämä on korutiini.

write(buf: bytes) None

Kerää buf tulostuspuskuriin. Data tyhjennetään vasta, kun Stream.drain()-metodia kutsutaan. On suositeltavaa kutsua Stream.drain() heti tämän funktion kutsumisen jälkeen.

drain() None

Tyhjennä (kirjoita) kaikki puskuroitu tulostusdata virtaan.

Tämä on korutiini.

class asyncio.Server

Tämä edustaa palvelinluokkaa, jonka funktio start_server() palauttaa. Sitä voidaan käyttää async with-lauseessa palvelimen sulkemiseksi poistuttaessa.

close() None

Sulje palvelin.

wait_closed() None

Odota, että palvelin sulkeutuu.

Tämä on korutiini.

Tapahtumasilmukka

asyncio.get_event_loop() Loop

Palauttaa tapahtumasilmukan, jota käytetään tehtävien ajastamiseen ja suorittamiseen. Katso Loop.

asyncio.new_event_loop() Loop

Nollaa tapahtumasilmukka ja palauta se.

Huomautus: koska MicroPythonissa on vain yksi tapahtumasilmukka, tämä funktio vain nollaa silmukan tilan, se ei luo uutta.

class asyncio.Loop

Tämä edustaa objektia, joka ajastaa ja suorittaa tehtäviä. Sitä ei voi luoda, käytä sen sijaan funktiota get_event_loop().

create_task(coro: Coroutine) Task

Luo tehtävä annetusta coro-objektista ja palauta uusi Task-objekti.

run_forever() None

Suorita tapahtumasilmukkaa, kunnes kutsutaan stop().

run_until_complete(awaitable: Awaitable) Any

Suorita annettua awaitable-objektia, kunnes se valmistuu. Jos awaitable ei ole tehtävä, se korotetaan tehtäväksi.

stop() None

Pysäytä tapahtumasilmukka.

close() None

Sulje tapahtumasilmukka.

set_exception_handler(handler: Callable) None

Aseta poikkeuskäsittelijä, jota kutsutaan, kun tehtävä nostaa poikkeuksen, jota ei napata. handler-funktion tulisi hyväksyä kaksi argumenttia: (loop, context).

get_exception_handler() Callable | None

Hae nykyinen poikkeuskäsittelijä. Palauttaa käsittelijän tai None, jos mukautettua käsittelijää ei ole asetettu.

default_exception_handler(context: dict) None

Oletuspoikkeuskäsittelijä, jota kutsutaan.

call_exception_handler(context: dict) None

Kutsu nykyistä poikkeuskäsittelijää. Argumentti context välitetään edelleen ja se on sanakirja, joka sisältää avaimet: 'message', 'exception', 'future'.