8.16. Zaključak¶
Prošli ste kroz asyncio API – dijelove koji su skripti potrebni za istovremeno izvođenje više poslova na jednom CPU-u:
Kooperativni raspored – model na kojem počiva ostatak modula. Korutina koja se izvodi ima petlju samo za sebe dok ne pozove
await; prebacivanja se događaju samo na tim await pozivima.Korutine i zadaci –
async defdefinira jedinicu posla;asyncio.create_task()zakaže jednu istovremeno i vraćaTaskna koji aplikacija kasnije može čekati, otkazati ga ili identificirati.Petlja događaja – mehanizam koji izvodi korutine i zadatke.
asyncio.run()je jedina ulazna točka koju većina skripti treba; klasaLoopizlaže ostatak za rijetke slučajeve kojima je potreban.Koordinacija –
gather()za grananje i objedinjavanje,wait_for()za rokove,Task.canceli obrazac čišćenja ufinallyklauzuli, širenje iznimaka kroz zadatke i gather pozive te kuka rukovatelja iznimkama petlje.Primitivi sinkronizacije –
Eventza signalizaciju među korutinama,Lockza serijalizaciju pristupa dijeljenom resursu kroz await pozive teThreadSafeFlagza buđenje asyncio zadatka iz rukovatelja prekida.Prilagođeni async objekti – jezične kuke koje omogućuju da se aplikacijske klase priključe asyncio idiomima.
__await__za objekte koji su sami metaawait,__aiter__/__anext__zaasync forte__aenter__/__aexit__zaasync with.Hvatanje sličica – omotač koji pretvara
csi.CSI.snapshot()u korutinu prilagođenuawaitpozivu, tako da se petlja hvatanja izvodi uz drugi asyncio posao.Zamke – zaboravljeni
awaitpozivi, uske petlje bez prepuštanja, progutana otkazivanja, dijeljeno stanje mijenjano kroz await pozive te ostale zamke specifične za asyncio.
To je dovoljno za pisanje programa koji na istoj petlji miješaju rad s kamerom, hardverski I/O i istovremeni pozadinski posao.
8.16.1. Kasnije korištenje ove reference¶
Tretirajte asyncio poglavlja kao referentni materijal; vraćanje radi oblika async with ili točnog ponašanja gather() pri otkazivanju srodnog zadatka upravo je predviđena upotreba. Referentna stranica modula asyncio navodi svaku funkciju i klasu na jednom mjestu kada je pitanje samo „koje je točno ime ovog poziva”.
Za bogatije primitive izgrađene na vrhu modula – semafore, redove, barijere i opsežnu zbirku pomoćnika u obliku aplikacija – repozitorij peterhinch/micropython-async je standardni izvor koji održava zajednica.
8.16.2. Kamo dalje odavde¶
Umrežavanje je sljedeća velika tema. asyncio.open_connection(), asyncio.start_server() i klasa Stream način su na koji asyncio skripta razgovara s ostatkom mreže iznutra iz korutine, zajedno s modulima network i socket u podlozi. Sve što ste naučili o await, Task, otkazivanju i primitivima sinkronizacije izravno se prenosi dalje.