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ätasync def määrittelee työyksikön; asyncio.create_task() ajoittaa sellaisen samanaikaisesti ja palauttaa Task-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.

  • Koordinointigather() haarauttamiseen ja kokoamiseen, wait_for() aikarajoihin, Task.cancel ja finally-lausekkeen siivouskuvio, poikkeusten leviäminen tehtävien ja gather-kutsujen kautta sekä silmukan poikkeustenkäsittelijän kytkentä.

  • SynkronointiprimitiivitEvent korutiinien väliseen signalointiin, Lock jaetun resurssin käytön sarjallistamiseen await-kutsujen yli ja ThreadSafeFlag asyncio-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 itse await-kohteita, __aiter__ / __anext__ async for-rakenteelle ja __aenter__ / __aexit__ async with-rakenteelle.

  • Kehyksen kaappaus – kääre, joka muuttaa csi.CSI.snapshot()-metodin await-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.