Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Korutiinien Luominen ja Suorittaminen | Asynchronous Programming
Pythonin Rakenteellinen Ohjelmointi

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.

question mark

Mikä väite kuvaa parhaiten, miten asyncio.gather ajoittaa korutiinit?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 4. Luku 2
some-alt