8. Asyncio¶
Doposud byl každý skript v tomto návodu sekvenční – v jednu chvíli běží jeden řádek a volání, které musí čekat (čtení ze senzoru, síťová výměna, snímek), blokuje skript, dokud neskončí. To funguje, dokud je třeba dělat jen jednu věc. Jakmile aplikace potřebuje dělat několik věcí najednou – spouštět smyčku snímání a odpovídat na sériový příkaz a nahrávat snímky po síti – sekvenční skript přestává stačit. První pomalé volání zabrání všemu ostatnímu v postupu.
Modul asyncio je odpovědí MicroPythonu. Umožňuje aplikaci popsat několik úloh jako oddělené korutiny a spouštět je souběžně na jediném vlákně, kooperativně – právě běžící korutina předá řízení zpět plánovači, kdykoli musí čekat. Smyčka snímání, čtečka UART a síťový klient mohou všechny žít ve stejném skriptu a pomalé části jedné už nezmrazí ostatní.
Následující stránky pokrývají klíčová slova async/await a životní cyklus Task, koordinaci pomocí gather() a wait_for(), rušení a propagaci výjimek, tři vestavěná synchronizační primitiva (Event, Lock, ThreadSafeFlag), jazykové háčky pro zapojení aplikačních tříd do asyncio idiomů, malý obal CSI, který umožňuje, aby snapshot() běžel jako korutina, a běžná úskalí, která přicházejí s kooperativním plánováním.
Koordinace
Synchronizační primitiva
Vlastní asynchronní objekty
Řízení smyčky
Zachytávání snímků
Úskalí
Shrnutí