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