Korutiinien Luominen ja Suorittaminen
Pyyhkäise näyttääksesi valikon
Asynkronisen ohjelmoinnin aloittamiseksi Pythonissa on tärkeää ymmärtää korutiinit. Korutiini on erityinen funktio, joka määritellään async def -avainsanalla. Korutiinit mahdollistavat suorituksen keskeyttämisen ja jatkamisen, jolloin voidaan käsitellä tehtäviä, kuten syöte-/tulostetoimintojen odottamista – esimerkiksi tiedoston lukemista, verkkopyyntöjä tai tietokantakyselyjä – estämättä koko ohjelman toimintaa. Tämä tarkoittaa, että kun yksi tehtävä odottaa dataa, muut tehtävät voivat jatkua, mikä parantaa tehokkuutta ja reagointikykyä.
Korutiinin suorittamiseen käytetään asyncio.run, joka käynnistää tapahtumasilmukan, suorittaa korutiinin ja sulkee silmukan lopuksi. Tämä on nykyaikaisen Pythonin vakiotapa asynkronisen koodin käynnistämiseen.
Jos haluat suorittaa useamman korutiinin samanaikaisesti, voit käyttää asyncio.gather -funktiota niiden ajoittamiseen rinnakkain. Näin ohjelma voi käynnistää useita tehtäviä ja odottaa niiden kaikkien valmistumista, mikä tehostaa ajankäyttöä erityisesti hitaita I/O-toimintoja odotettaessa.
Seuraava koodi havainnollistaa näitä käsitteitä.
import asyncio
async def greet(name, delay):
await asyncio.sleep(delay)
print(f"Hello, {name}!")
async def main():
# Schedule two coroutines to run concurrently
await asyncio.gather(
greet("Alice", 2),
greet("Bob", 1)
)
asyncio.run(main())
Odotettu tulos:
Hello, Bob!
Hello, Alice!
Bobin tervehdys ilmestyy ensin, koska siinä käytetään lyhyempää viivettä (1 sekunti) kuin Alicen (2 sekuntia).
greet-korutiini luodaan käyttäen async def, mikä mahdollistaa suorituksen keskeyttämisen await asyncio.sleep(delay)-komennolla ennen tervehdyksen tulostamista. main-korutiini ajoittaa kaksi greet-instanssia – yhden "Alice"-nimiselle 2 sekunnin viiveellä ja yhden "Bob"-nimiselle 1 sekunnin viiveellä – käyttäen asyncio.gather-funktiota. Tämä tarkoittaa, että molemmat tervehdykset käsitellään rinnakkain, eikä ohjelma odota toisen valmistumista ennen toisen aloittamista. Lopuksi asyncio.run(main()) käynnistää tapahtumasilmukan, suorittaa main-korutiinin ja huolehtii lopuksi siivouksesta. Tämä lähestymistapa mahdollistaa useiden odottamista vaativien tehtävien (kuten verkkopyyntöjen tai aikaviiveiden) käsittelyn samanaikaisesti, mikä tekee ohjelmasta tehokkaamman ja reagoivamman.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme