8.16. Recapitulare¶
Ați parcurs API-ul asyncio – componentele de care un script are nevoie pentru a rula mai multe sarcini concurent pe un singur CPU:
Planificare cooperativă – modelul pe care se sprijină restul modulului. Corutina în execuție are bucla pentru sine până când execută
await; comutările au loc doar la acele await-uri.Corutine și sarcini –
async defdefinește o unitate de lucru;asyncio.create_task()planifică una concurent și returnează unTaskpe care aplicația îl poate aștepta ulterior, anula sau identifica.Bucla de evenimente – motorul care rulează corutinele și sarcinile.
asyncio.run()este singurul punct de intrare de care au nevoie majoritatea scripturilor; clasaLoopexpune restul pentru cazurile rare în care este nevoie.Coordonare –
gather()pentru distribuire și colectare,wait_for()pentru termene-limită,Task.cancelși tiparul de curățare cu clauzafinally, propagarea excepțiilor prin sarcini și apeluri gather, precum și hook-ul gestionarului de excepții al buclei.Primitive de sincronizare –
Eventpentru semnalizare între corutine,Lockpentru serializarea accesului la o resursă partajată de-a lungul await-urilor șiThreadSafeFlagpentru trezirea unei sarcini asyncio dintr-un gestionar de întrerupere.Obiecte async personalizate – hook-urile de limbaj care permit claselor aplicației să se integreze în idiomurile asyncio.
__await__pentru obiecte care sunt ele însele ținta unuiawait,__aiter__/__anext__pentruasync forși__aenter__/__aexit__pentruasync with.Captura de cadre – wrapper-ul care transformă
csi.CSI.snapshot()într-o corutină compatibilă cuawait, astfel încât o buclă de captură rulează în paralel cu alte sarcini asyncio.Capcane –
await-uri uitate, bucle strânse fără cedări, anulări înghițite, stare partajată modificată de-a lungul await-urilor și restul capcanelor specifice asyncio.
Acest lucru este suficient pentru a scrie programe care îmbină lucrul cu camera, I/O hardware și lucrul concurent în fundal, pe aceeași buclă.
8.16.1. Folosirea acestei referințe ulterior¶
Tratați capitolele despre asyncio ca material de referință; revenirea pentru forma lui async with sau comportamentul exact al lui gather() la eșecul unui frate este utilizarea intenționată. Pagina de referință a modulului asyncio listează fiecare funcție și clasă într-un singur loc atunci când întrebarea este doar „care este numele exact al acestui apel”.
Pentru primitive mai bogate construite peste modul – semafoare, cozi, bariere și o colecție substanțială de utilitare orientate spre aplicații – depozitul peterhinch/micropython-async este sursa standard întreținută de comunitate.
8.16.2. Unde să mergeți de aici¶
Rețelistica este următorul subiect major. asyncio.open_connection(), asyncio.start_server() și clasa Stream sunt modul în care un script asyncio comunică cu restul rețelei din interiorul unei corutine, împreună cu modulele network și socket aflate dedesubt. Tot ce ați învățat despre await, Task, anulare și primitivele de sincronizare se transferă direct mai departe.