8.13. Silmukan hallinta¶
Useimmat asyncio-skriptit eivät koskaan kosketa tapahtumasilmukkaa suoraan – asyncio.run() riittää. Tämä sivu käsittelee Loop -rajapintaa niitä tapauksia varten, joissa se ei riitä: poikkeuskäsittelijän asentaminen, silmukan suorittaminen eri elinkaarella kuin run tai silmukkaobjektin säilyttäminen instrumentointia varten.
8.13.1. Silmukan hakeminen¶
asyncio.get_event_loop()– palauttaaLoop-objektin. Turvallinen kutsua korutiinin sisältä tai ulkopuolelta.asyncio.new_event_loop()– MicroPythonissa nollaa olemassa olevan silmukan tilan sen sijaan, että loisi uuden. Huomautus kannattaa toistaa: ohjelmaa kohden on tasan yksi tapahtumasilmukka.
Silmukan suorittamiseen ei ole muuta API:a kuin Loop -luokan metodit ja asyncio.run().
8.13.2. Silmukan suorittaminen suoraan¶
asyncio.run() on oikea aloituspiste lähes jokaiselle sovellukselle. Kaksi Loop -metodia on olemassa niitä tapauksia varten, joissa se ei ole.
run_until_complete()– annetulla odotettavalla suorita silmukkaa, kunnes kyseinen odotettava valmistuu, ja palauta sitten sen tulos. Vastaa yhtäasyncio.run()-kutsua ilman silmukan purkua.run_forever()– suorita silmukkaa, kunnesstop()kutsutaan tehtävän sisältä. Ei ylätason odotettavaa; sovelluksen odotetaan ajastavan tarvitsemansaasyncio.create_task()-funktiolla ennenrun_forever-kutsua.
Vastaavat metodit ovat stop() (pyydä silmukkaa pysähtymään nykyisen tehtävän valmistuttua) ja close() (vapauta silmukan resurssit).
8.13.3. Tehtävien luonti silmukan puolelta¶
create_task()– sama toiminto kuinasyncio.create_task(). Vapaa funktio on olemassa, jotta sovelluskoodi ei tarvitse silmukkaviittausta tavalliseen tapaukseen; metodi on olemassa instrumentointia varten, jolla sellainen jo on.
8.13.4. Poikkeuskäsittelijät¶
Silmukka kutsuu käsittelijää, kun tehtävä nostaa poikkeuksen, jota mikään korutiinikutsuketjussa ei ole napannut – tyypillinen tapaus on tehtävä, jonka sovellus loi asyncio.create_task() -funktiolla eikä koskaan odottanut. Oletuskäsittelijä tulostaa jäljitysjäljen sys.stderr -kanavan kautta; poikkeukset -sivu näytti, miten sen voi vaihtaa johonkin mukautettuun.
set_exception_handler()– asenna mukautettu käsittelijä. Käsittelijä on kutsuttavahandler(loop, context), jossacontexton sanakirja, jossa on vähintään'message'ja yleensä'exception'ja'future'.get_exception_handler()– palauttaa parhaillaan asennetun käsittelijän taiNone, jos oletus on käytössä.default_exception_handler()– sisäänrakennettu käsittelijä. Hyödyllinen mukautetun käsittelijän sisällä, joka haluaa myös suorittaa oletustoiminnon (kirjata flash-muistiin ja tulostaa jäljitysjäljen, esimerkiksi).call_exception_handler()– suorita parhaillaan asennettu käsittelijä käsin rakennetulla kontekstisanakirjalla. Käyttää enimmäkseen silmukka itse; sovellus tarvitsee sitä harvoin.