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'.