Piton

Python Asyncio bemutató

Python Asyncio bemutató
Az Asyncio könyvtár bevezetésre kerül a Python 3-ban.4 egyszálú egyidejű programok futtatásához. Ez a könyvtár lenyűgöző sebességével és sokféle felhasználásával népszerű, mint más könyvtárak és keretrendszerek. Ezt a könyvtárat használják a pythonban koroutinok létrehozására, végrehajtására és strukturálására, valamint több feladat egyidejű kezelésére anélkül, hogy a feladatokat párhuzamosan végeznék. A könyvtár fő részeit az alábbiakban határozzuk meg:

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 asyncio
async 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.py

A 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 asyncio
async 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.py

A 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 asyncio
async 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.py

A 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.

Ingyenes és nyílt forráskódú játékmotorok a Linux játékok fejlesztéséhez
Ez a cikk felsorolja azokat az ingyenes és nyílt forráskódú játékmotorokat, amelyek felhasználhatók 2D és 3D játékok fejlesztésére Linuxon. Számos ily...
Shadow of the Tomb Raider for Linux Tutorial
A Shadow of the Tomb Raider a Tomb Raider sorozat tizenkettedik kiegészítője - az Eidos Montreal által létrehozott akció-kaland játék franchise. A ját...
Az FPS növelése Linux alatt?
Az FPS jelentése Képkocka másodpercenként. Az FPS feladata a videolejátszások vagy játékteljesítmények képkockasebességének mérése. Egyszerű szavakkal...