8.16. Yhteenveto¶
Olet käynyt läpi asyncion API:n – palaset, joita skripti tarvitsee ajaakseen useita tehtäviä samanaikaisesti yhdellä suorittimella:
Yhteistyöhön perustuva vuorottaminen – malli, johon muu moduuli nojaa. Suorituksessa olevalla korutiinilla on silmukka yksinään hallussaan, kunnes se suorittaa
await-kutsun; vaihdot tapahtuvat vain noissa await-kohdissa.Korutiinit ja tehtävät –
async defmäärittelee työyksikön;asyncio.create_task()ajoittaa sellaisen samanaikaisesti ja palauttaaTask-objektin, jota sovellus voi myöhemmin odottaa, peruuttaa tai tunnistaa.Tapahtumasilmukka – moottori, joka ajaa korutiineja ja tehtäviä.
asyncio.run()on ainoa sisääntulokohta, jota useimmat skriptit tarvitsevat;Loop-luokka tarjoaa loput niitä harvoja tapauksia varten, jotka sitä tarvitsevat.Koordinointi –
gather()haarauttamiseen ja kokoamiseen,wait_for()aikarajoihin,Task.canceljafinally-lausekkeen siivouskuvio, poikkeusten leviäminen tehtävien ja gather-kutsujen kautta sekä silmukan poikkeustenkäsittelijän kytkentä.Synkronointiprimitiivit –
Eventkorutiinien väliseen signalointiin,Lockjaetun resurssin käytön sarjallistamiseen await-kutsujen yli jaThreadSafeFlagasyncio-tehtävän herättämiseen keskeytyksenkäsittelijästä.Mukautetut async-objektit – kielen kytkennät, joiden avulla sovellusluokat voivat liittyä asyncio-idiomeihin.
__await__objekteille, jotka ovat itseawait-kohteita,__aiter__/__anext__async for-rakenteelle ja__aenter__/__aexit__async with-rakenteelle.Kehyksen kaappaus – kääre, joka muuttaa
csi.CSI.snapshot()-metodinawait-ystävälliseksi korutiiniksi, niin että kaappaussilmukka toimii muun asyncio-työn rinnalla.Sudenkuopat – unohtuneet
await-kutsut, tiukat silmukat ilman vuoronluovutuksia, niellyt peruutukset, await-kutsujen yli muutettu jaettu tila ja muut asyncio-kohtaiset ansat.
Se riittää sellaisten ohjelmien kirjoittamiseen, jotka yhdistävät kameratyön, laitteiston I/O:n ja samanaikaisen taustatyön samaan silmukkaan.
8.16.1. Tämän viitteen käyttö myöhemmin¶
Käsittele asyncio-lukuja viitemateriaalina; palaaminen tarkistamaan async with-rakenteen muoto tai gather()-funktion täsmällinen toiminta sisartehtävän epäonnistuessa on niiden tarkoitettu käyttö. asyncio-viitesivu luettelee jokaisen funktion ja luokan yhdessä paikassa, kun kysymys on vain ”mikä on tämän kutsun täsmällinen nimi”.
Rikkaampia, moduulin päälle rakennettuja primitiivejä varten – semaforit, jonot, sulkupuomit ja merkittävä kokoelma sovellusmuotoisia aputyökaluja – peterhinch/micropython-async -tietovarasto on vakiomuotoinen yhteisön ylläpitämä lähde.
8.16.2. Mihin tästä jatkaa¶
Verkkoyhteydet ovat seuraava merkittävä aihe. asyncio.open_connection(), asyncio.start_server() ja Stream-luokka ovat tapoja, joilla asyncio-skripti puhuu muulle verkolle korutiinin sisältä, yhdessä alla olevien network- ja socket-moduulien kanssa. Kaikki, mitä olet oppinut await-kutsusta, Task-objektista, peruutuksesta ja synkronointiprimitiiveistä, siirtyy suoraan eteenpäin.