8. Asyncio¶
Dosad je svaka skripta u ovom vodiču bila sekvencijalna – jedna se linija izvodi u jednom trenutku, a poziv koji mora čekati (čitanje senzora, mrežni obilazak, snimka) blokira skriptu dok ne završi. To funkcionira dok postoji samo jedna stvar za napraviti. U trenutku kada aplikacija treba raditi nekoliko stvari odjednom – pokrenuti petlju snimanja i odgovarati na serijsku naredbu i prenositi sličice preko mreže – sekvencijalna se skripta raspada. Prvi spori poziv zaustavlja sve ostalo u napredovanju.
Modul asyncio je MicroPythonov odgovor. On omogućuje aplikaciji da nekoliko poslova opiše kao zasebne korutine i izvodi ih istovremeno na jednoj niti, kooperativno – ona korutina koja se trenutno izvodi prepušta kontrolu natrag rasporednu kad god mora čekati. Petlja snimanja, čitač UART-a i mrežni klijent mogu svi živjeti u istoj skripti, a spori dijelovi jednoga više ne zamrzavaju ostale.
Sljedeće stranice pokrivaju ključne riječi async/await i životni ciklus Task, koordinaciju putem gather() i wait_for(), otkazivanje i propagaciju iznimaka, tri ugrađena primitiva za sinkronizaciju (Event, Lock, ThreadSafeFlag), jezične kuke za uklapanje aplikacijskih klasa u asyncio idiome, mali omotač CSI koji omogućuje da se snapshot() izvodi kao korutina, te uobičajene zamke koje dolaze s kooperativnim raspoređivanjem.
Koordinacija
Primitivi za sinkronizaciju
Prilagođeni asinkroni objekti
Upravljanje petljom
Snimanje sličica
Zamke
Sažetak