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 zadaciasync def definira jedinicu posla; asyncio.create_task() zakaže jednu istovremeno i vraća Task na 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; klasa Loop izlaže ostatak za rijetke slučajeve kojima je potreban.

  • Koordinacijagather() za grananje i objedinjavanje, wait_for() za rokove, Task.cancel i obrazac čišćenja u finally klauzuli, širenje iznimaka kroz zadatke i gather pozive te kuka rukovatelja iznimkama petlje.

  • Primitivi sinkronizacijeEvent za signalizaciju među korutinama, Lock za serijalizaciju pristupa dijeljenom resursu kroz await pozive te ThreadSafeFlag za 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 meta await, __aiter__ / __anext__ za async for te __aenter__ / __aexit__ za async with.

  • Hvatanje sličica – omotač koji pretvara csi.CSI.snapshot() u korutinu prilagođenu await pozivu, tako da se petlja hvatanja izvodi uz drugi asyncio posao.

  • Zamke – zaboravljeni await pozivi, 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.