Coroutine: A kód azon részét, amelyet több szálú szkriptben lehet szüneteltetni és folytatni, koroutinnak nevezzük. a koroutinok együttműködnek a többszálas programban. Amikor az egyik coroutine szünetel, akkor a másik coroutine képes végrehajtani.
Esemény hurok: Arra szolgál, hogy elindítsa a korutinok végrehajtását és kezelje a bemeneti / kimeneti műveleteket. Több feladat elvégzése és azok teljesítése.
Feladat: A koroutinok végrehajtását és eredményét a feladatok határozzák meg. Az asyncio könyvtár segítségével több feladatot rendelhet hozzá, és aszinkron futtathatja a feladatokat.
Jövő: Jövőbeni tárolóként működik, ahol a koroutinok eredményét a befejezés után tárolják. Ez akkor hasznos, ha bármelyik korutinnak meg kell várnia a többi koroutin eredményét.
Az oktatóanyag néhány egyszerű példa segítségével bemutatja, hogyan tudja megvalósítani az asyncio könyvtár fenti fogalmait.
1. példa: Hozzon létre egyetlen koroutint egyetlen feladattal
Hozzon létre egy nevű fájlt aszinkron1.py és adja hozzá a következő kódot. az asyncio könyvtár importálva van a könyvtár funkcióinak használatához. hozzá függvény van deklarálva egy adott számtartomány összegének kiszámításához. Az 1 és 101 közötti számtartományt a feladat egy másodperces késleltetéssel rendeli hozzá. Az eseményhurok deklarálva lesz, hogy addig fog futni, amíg a fő módszer összes feladata teljes nem lesz. Az érték kiszámítása után a függvény vár egy másodpercet, és kinyomtatja az eredményt.
import asyncioasync def add (kezdet, vég, várakozás):
# Inicializálja az összegváltozót
összeg = 0
# Számolja ki az összes szám összegét
n tartományban (kezdet, vég):
összeg + = n
# Várjon a kijelölt másodpercekre
várja asyncio-t.alvás (várakozás)
# Nyomtassa ki az eredményt
nyomtatás (f'Sum elejétől végéig sum ')
async def main ():
# Hozzárendeljen egyetlen feladatot
feladat = hurok.create_task (add (1,101,1))
# Futtassa a feladatot aszinkron módon
várja asyncio-t.várj ([feladat])
ha __name__ == '__main__':
# Deklarálja az eseményhurkot
hurok = asyncio.get_event_loop ()
# Futtassa a kódot az összes feladat elvégzéséig
hurok.run_until_complete (main ())
# Zárja be a hurkot
hurok.Bezárás()
Kimenet:
$ python3 async1.pyA kimenet 1-101 összegét mutatja, ami 5050.
2. példa: Hozzon létre több koroutint
Az asyncio könyvtár használata törlődik, ha egyszerre több koroutint futtat. Hozzon létre egy új nevű fájlt aszinkron2.py és adja hozzá a következő kódot. Három feladat jön létre három különböző tartományban és várakozási értékekkel fő() módszer. Az első feladat 5 és 500000 közötti összeget számol 3 másodperc várakozással, a második feladat 2 és 300000 közötti összeget számol 2 másodperc várakozással, a harmadik feladat pedig 10 és 1000 közötti összeget 1 másodperc várakozással. Az alacsony várakozási értékű feladat elsőre befejeződik, a magas várakozási értékű feladat pedig végre.
import asyncioasync def add (kezdet, vég, várakozás):
# Inicializálja az összegváltozót
összeg = 0
# Számolja ki az összes szám összegét
n tartományban (kezdet, vég):
összeg + = n
# Várjon a kijelölt másodpercekre
várja asyncio-t.alvás (várakozás)
# Nyomtassa ki az eredményt
nyomtatás (f'Sum elejétől végéig összeg ')
async def main ():
# Az első feladat hozzárendelése
feladat1 = hurok.create_task (add (5,500000,3))
# Második feladat hozzárendelése
task2 = hurok.create_task (add (2,300000,2))
# Harmadik feladat hozzárendelése
task3 = hurok.create_task (add (10,1000,1))
# Futtassa a feladatokat aszinkron módon
várja asyncio-t.várakozás ([feladat1, feladat2, feladat3])
ha __name__ == '__main__':
# Deklarálja az eseményhurkot
hurok = asyncio.get_event_loop ()
# Futtassa a kódot az összes feladat elvégzéséig
hurok.run_until_complete (main ())
# Zárja be a hurkot
hurok.Bezárás()
Kimenet:
$ python3 async1.pyA kimenet azt mutatja, hogy a 3. feladat teljesült először, mert ennek a feladatnak a várakozási ideje csak 1 másodperc volt, az 1. feladat pedig utolsó, mert a feladat várakozási ideje 3 másodperc volt.
3. példa: korutinok a jövővel
Ez a példa az asyncio könyvtár jövőbeli objektumának használatát mutatja be. Hozzon létre egy új nevű fájlt aszinkron3.py és adja hozzá a következő kódot. Ebben a példában két feladatot osztanak ki a jövőben. show_message A funkció itt van deklarálva, hogy kinyomtassa az üzenetet a koroutine végrehajtása előtt és a végrehajtás befejezése után. Az első feladat 2 másodpercig vár, és az utolsó befejeződik. A második feladat 1 másodpercig vár, és először teljesít.
import asyncioasync def show_message (szám, várakozás):
# Nyomtassa ki az üzenetet
nyomtatás (f'futtatás szám fut ')
# Várjon a kijelölt másodpercekre
várja asyncio-t.alvás (várakozás)
nyomtatás (f'Feladat: szám elkészült ')
async def stop_after (mikor):
várja asyncio-t.alvás (mikor)
hurok.álljon meg()
async def main ():
# Az első feladat hozzárendelése
task1 = asyncio.užtikrinti_future (show_message (1,2))
nyomtatás ('1. ütemezés')
# Második feladat hozzárendelése
task2 = asyncio.užtikrinti_future (show_message (2,1))
nyomtatás ('2. ütemezés')
# Futtassa a feladatokat aszinkron módon
várja asyncio-t.várjon ([feladat1, feladat2])
ha __name__ == '__main__':
# Deklarálja az eseményhurkot
hurok = asyncio.get_event_loop ()
# Futtassa a fő módszer kódját az összes feladat elvégzéséig
hurok.run_until_complete (main ())
Kimenet:
$ python3 async3.pyA kimeneten látható, hogy a task1 először indul, és utoljára fejeződik be, és a task2 később indul, de először rövid várakozási időre.
Következtetés
A python asyncio könyvtárát használó aszinkron programozás alapfogalmát itt ismertetjük. Remélem, az oktatóanyag példáinak gyakorlása után képes lesz többszálas kódot írni a pythonba.