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.

Synchronizační primitiva

Řízení smyčky

Zachytávání snímků

Úskalí

Shrnutí