8.16. Shrnutí¶
Prošli jste API knihovny asyncio – součásti, které skript potřebuje k souběžnému spuštění několika úloh na jediném CPU:
Kooperativní plánování – model, na němž spočívá zbytek modulu. Běžící korutina má smyčku jen pro sebe, dokud nezavolá
await; přepnutí nastávají pouze v těchto await bodech.Korutiny a úlohy –
async defdefinuje jednotku práce;asyncio.create_task()naplánuje jednu souběžně a vrátíTask, na který může aplikace později čekat, zrušit jej nebo identifikovat.Smyčka událostí – engine, který spouští korutiny a úlohy.
asyncio.run()je jediný vstupní bod, který většina skriptů potřebuje; třídaLoopzpřístupňuje zbytek pro vzácné případy, které jej potřebují.Koordinace –
gather()pro rozvětvení a sloučení,wait_for()pro časové limity,Task.cancela vzor úklidu v klauzulifinally, šíření výjimek skrz úlohy a volání gather a hook obslužné rutiny výjimek smyčky.Synchronizační primitivy –
Eventpro signalizaci mezi korutinami,Lockpro serializaci přístupu ke sdílenému prostředku napříč await body aThreadSafeFlagpro probuzení asyncio úlohy z obsluhy přerušení.Vlastní async objekty – jazykové háčky, které umožňují aplikačním třídám zapojit se do asyncio idiomů.
__await__pro objekty, které jsou samy cílemawait,__aiter__/__anext__proasync fora__aenter__/__aexit__proasync with.Zachytávání snímků – obal, který mění
csi.CSI.snapshot()na korutinu přívětivou proawait, takže smyčka zachytávání běží souběžně s ostatní asyncio prací.Úskalí – zapomenuté
await, těsné smyčky bez předání řízení, spolknutá zrušení, sdílený stav měněný napříč await body a zbytek pastí specifických pro asyncio.
To stačí k psaní programů, které na téže smyčce kombinují práci s kamerou, hardwarové I/O a souběžnou práci na pozadí.
8.16.1. Pozdější použití této reference¶
K asyncio kapitolám přistupujte jako k referenčnímu materiálu; vracet se pro tvar async with nebo přesné chování gather() při selhání sourozence je zamýšlené použití. Referenční stránka modulu asyncio uvádí každou funkci a třídu na jednom místě, když je otázkou jen „jaké je přesné jméno tohoto volání“.
Pro bohatší primitivy postavené nad tímto modulem – semafory, fronty, bariéry a rozsáhlou kolekci pomocníků ve tvaru aplikací – je standardním zdrojem udržovaným komunitou repozitář peterhinch/micropython-async.
8.16.2. Kam dál odsud¶
Sítě jsou dalším velkým tématem. asyncio.open_connection(), asyncio.start_server() a třída Stream jsou způsoby, jakými asyncio skript zevnitř korutiny komunikuje se zbytkem sítě, společně s moduly network a socket pod nimi. Vše, co jste se naučili o await, Task, rušení a synchronizačních primitivech, se přímo přenáší dál.