8. Asyncio¶
Tähän asti jokainen oppaan skripti on ollut sekventiaalinen – yksi rivi suoritetaan kerrallaan, ja kutsu, jonka on odotettava (sensorin luku, verkkoyhteyden edestakainen matka, tilannekuva), estää skriptin, kunnes se valmistuu. Tämä toimii, kun tehtävää on vain yksi. Sillä hetkellä, kun sovelluksen on tehtävä useita asioita samanaikaisesti – ajaa tilannekuvasilmukkaa ja vastata sarjakomentoon ja lähettää kehyksiä verkon yli – sekventiaalinen skripti pettää. Ensimmäinen hidas kutsu pysäyttää kaiken muun etenemisen.
asyncio -moduuli on MicroPythonin vastaus. Se antaa sovelluksen kuvata useita tehtäviä erillisinä korutiineina ja suorittaa niitä samanaikaisesti yhdellä säikeellä, yhteistoiminnallisesti – mikä tahansa korutiini, joka on parhaillaan käynnissä, luovuttaa hallinnan takaisin ajastimelle aina, kun sen on odotettava. Tilannekuvasilmukka, UART-lukija ja verkkoasiakas voivat kaikki elää samassa skriptissä, eikä yhden hitaat osat enää jäädytä muita.
Seuraavat sivut käsittelevät async/await -avainsanoja ja Task -elinkaarta, koordinointia gather() - ja wait_for() -funktioiden kautta, peruutusta ja poikkeusten leviämistä, kolmea sisäänrakennettua synkronointiprimitiiviä (Event, Lock, ThreadSafeFlag), kielikoukut, joilla sovellusluokat liitetään asyncio-idiomeihin, pienen CSI -kääreen, joka antaa snapshot() -metodin toimia korutiinina, sekä yleiset sudenkuopat, joita yhteistoiminnallinen ajastus tuo mukanaan.
Käsitteet
Koordinointi
Synkronointiprimitiivit
Mukautetut async-objektit
Silmukan hallinta
Kehysten kaappaus
Sudenkuopat
Yhteenveto