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.run(coro: Coroutine) Any#
Luo uusi tehtävä annetusta korutiinista ja suorita se valmistumiseen asti.
Palauttaa arvon, jonka coro palauttaa.
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 poikkeuksenasyncio.CancelledError, joka voidaan jättää huomiotta tai napata käyttäentry...except- taitry...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.
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().
class Event#
- class asyncio.Event#
Luo uusi tapahtuma, jota voidaan käyttää tehtävien synkronointiin. Tapahtumat alkavat tyhjennetyssä tilassa.
- 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.
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.
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.
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 onssl.SSLContext-objekti, tätä kontekstia käytetään siirron luomiseen; jos ssl onTrue, 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ä
StreamReaderettäStreamWriterovat 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.
- 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.
- write(buf: bytes) None#
Kerää buf tulostuspuskuriin. Data tyhjennetään vasta, kun
Stream.drain()-metodia kutsutaan. On suositeltavaa kutsuaStream.drain()heti tämän funktion kutsumisen jälkeen.
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_until_complete(awaitable: Awaitable) Any#
Suorita annettua awaitable-objektia, kunnes se valmistuu. Jos awaitable ei ole tehtävä, se korotetaan tehtäväksi.
- 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).