8.16. Összegzés¶
Végigjártad az asyncio API-ját – azokat a darabokat, amelyekre egy szkriptnek szüksége van ahhoz, hogy egyetlen CPU-n több feladatot futtasson egyidejűleg:
Kooperatív ütemezés – az a modell, amelyen a modul többi része nyugszik. A futó korutin egyedül birtokolja a ciklust, amíg
await-ol; a váltások csak ezeknél az awaiteknél történnek.Korutinok és feladatok – az
async defegy munkaegységet definiál; azasyncio.create_task()egyet egyidejűleg ütemez, és visszaad egyTaskobjektumot, amelyre az alkalmazás később várakozhat, amelyet megszakíthat, vagy azonosíthat.Az eseményhurok – a motor, amely a korutinokat és feladatokat futtatja. Az
asyncio.run()az egyetlen belépési pont, amelyre a legtöbb szkriptnek szüksége van; aLooposztály a többit teszi elérhetővé azokra a ritka esetekre, amikor szükség van rá.Koordináció – a
gather()a szétoszláshoz és összegyűjtéshez, await_for()a határidőkhöz, aTask.cancelés afinally-záradékos takarítási minta, a kivételek terjedése a feladatokon és gather hívásokon keresztül, valamint a ciklus kivételkezelő horga.Szinkronizációs primitívek – az
Eventa korutinok közötti jelzéshez, azLockegy megosztott erőforrás eléréseinek soros rendezéséhez awaiteken keresztül, és azThreadSafeFlagegy asyncio feladat felébresztéséhez egy megszakításkezelőből.Egyedi async objektumok – a nyelvi horgok, amelyek lehetővé teszik az alkalmazás osztályainak az asyncio idiómákba való beilleszkedését. Az
__await__azoknak az objektumoknak, amelyek maguk azawaitcélpontjai, az__aiter__/__anext__azasync forszerkezethez, és az__aenter__/__aexit__azasync withszerkezethez.Képkocka-rögzítés – a csomagoló, amely a
csi.CSI.snapshot()hívást egyawait-barát korutinná alakítja, így egy rögzítési ciklus más asyncio munkával együtt fut.Buktatók – elfelejtett
await-ok, szoros ciklusok átadások nélkül, elnyelt megszakítások, awaiteken keresztül módosított megosztott állapot, és a többi asyncio-specifikus csapda.
Ennyi elég ahhoz, hogy olyan programokat írj, amelyek kameramunkát, hardveres I/O-t és egyidejű háttérmunkát vegyítenek ugyanazon a cikluson.
8.16.1. Ennek a referenciának a későbbi használata¶
Kezeld az asyncio fejezeteket referenciaanyagként; az async with alakjáért vagy a gather() egy testvérhiba esetén tanúsított pontos viselkedéséért való visszatérés a szándékolt felhasználás. Az asyncio referenciaoldal egy helyen sorolja fel az összes függvényt és osztályt, amikor a kérdés csak az, hogy „mi ennek a hívásnak a pontos neve”.
A modulra épülő gazdagabb primitívekhez – szemaforok, sorok, korlátok és alkalmazás-alakú segédeszközök jelentős gyűjteménye – a peterhinch/micropython-async tároló a szabványos, közösség által karbantartott forrás.
8.16.2. Merre tovább innen¶
A hálózatkezelés a következő nagy téma. Az asyncio.open_connection(), az asyncio.start_server() és a Stream osztály az, ahogyan egy asyncio szkript egy korutinon belülről kommunikál a hálózat többi részével, az alattuk lévő network és socket modulokkal együtt. Minden, amit az await-ról, a Task osztályról, a megszakításról és a szinkronizációs primitívekről megtanultál, egyenesen továbbvihető.