Krajta

Výukový program Python Asyncio

Výukový program Python Asyncio
Knihovna Asyncio je představena v pythonu 3.4 k provádění souběžných programů s jedním vláknem. Tato knihovna je oblíbená než jiné knihovny a rámce pro svou působivou rychlost a různé použití. Tato knihovna se v pythonu používá k vytváření, spouštění a strukturování korutin a k souběžnému zpracování více úkolů bez paralelního provádění úkolů. Hlavní části této knihovny jsou definovány níže:

Běžný: Část kódu, kterou lze pozastavit a obnovit ve vícevláknovém skriptu, se nazývá coroutine. coutiny fungují kooperativně ve vícevláknovém programu. Když se jeden program pozastaví, může se spustit druhý program.

Smyčka události: Používá se ke spuštění provádění korutin a ke zpracování operací vstupu / výstupu. Trvá několik úkolů a dokončíte je.

Úkol: Provedení a výsledek korutin jsou definovány úkoly. Pomocí asynciové knihovny můžete přiřadit větší počet úkolů a úlohy spouštět asynchronně.

Budoucnost: Funguje jako budoucí úložiště, kde se po dokončení uloží výsledek korutin. To je užitečné, když jakýkoli korutin vyžaduje čekat na výsledek jiného korutinu.

Jak můžete implementovat výše uvedené koncepty asynciové knihovny, je v tomto kurzu ukázáno pomocí několika jednoduchých příkladů.

Příklad-1: Vytvoření jediného korutinu s jediným úkolem

Vytvořte soubor s názvem async1.py a přidejte následující kód. Knihovna asyncio je importována, aby bylo možné využívat funkce této knihovny. přidat funkce je deklarována pro výpočet součtu konkrétního rozsahu čísel. Rozsah čísel od 1 do 101 je přiřazen úkolem se zpožděním jedné sekundy. Smyčka události je deklarována, že bude spuštěna, dokud nebudou dokončeny všechny úkoly hlavní metody. Po výpočtu hodnoty funkce počká jednu sekundu a vytiskne výsledek.

importovat asyncio
async def add (start, end, wait):
# Inicializovat proměnnou součtu
součet = 0
# Vypočítejte součet všech čísel
pro n v rozsahu (začátek, konec):
součet + = n
# Počkejte na přidělené sekundy
čekat asyncio.spát (počkat)
# Vytiskněte výsledek
print (f'Sum od start do end je sum ')
async def main ():
# Přiřaďte jeden úkol
task = loop.create_task (přidat (1,101,1))
# Spusťte úlohu asynchronně
čekat asyncio.počkat ([úkol])
pokud __name__ == '__main__':
# Deklarovat smyčku události
loop = asyncio.get_event_loop ()
# Spusťte kód, dokud nedokončíte všechny úlohy
smyčka.run_until_complete (main ())
# Zavřete smyčku
smyčka.zavřít()

Výstup:

$ python3 async1.py

Výstup ukazuje součet 1 až 101, což je 5050.

Příklad 2: Vytvoření více korutin

Používání knihovny asyncio bude vymazáno, když budete spouštět více coutrutin současně. Vytvořte nový soubor s názvem async2.py a přidejte následující kód. Jsou generovány tři úkoly se třemi různými rozsahy a hodnotami čekání hlavní() metoda. První úkol spočítá součet od 5 do 500000 počkáním 3 sekund, druhý úkol vypočítá součet od 2 do 300000 počkáním 2 sekundy a třetí úkol vypočítá součet od 10 do 1000 počkáním 1 sekundy. Úkol s nízkými hodnotami čekání se dokončí nejdříve a úkol s vysokými hodnotami čekání se dokončí nakonec.

importovat asyncio
async def add (start, end, wait):
# Inicializovat proměnnou součtu
součet = 0
# Vypočítejte součet všech čísel
pro n v rozsahu (začátek, konec):
součet + = n
# Počkejte na přidělené sekundy
čekat asyncio.spát (počkat)
# Vytiskněte výsledek
print (f'Sum od start do end je sum ')
async def main ():
# Přiřadit první úkol
task1 = smyčka.create_task (přidat (5 500 000,3))
# Přiřaďte druhý úkol
task2 = smyčka.create_task (přidat (2 300 000,2))
# Přiřaďte třetí úkol
task3 = smyčka.create_task (přidat (10,1000,1))
# Spusťte úkoly asynchronně
čekat asyncio.počkat ([task1, task2, task3])
pokud __name__ == '__main__':
# Deklarovat smyčku události
loop = asyncio.get_event_loop ()
# Spusťte kód, dokud nedokončíte všechny úlohy
smyčka.run_until_complete (main ())
# Zavřete smyčku
smyčka.zavřít()

Výstup:

$ python3 async1.py

Výstup ukazuje, že úkol3 je dokončen jako první, protože čekací doba tohoto úkolu byla pouze 1 sekunda a úkol1 je dokončen jako poslední, protože čekací doba tohoto úkolu byla 3 sekundy.

Příklad 3: Corutiny s budoucností

Tento příklad ukazuje použití budoucího objektu asynciové knihovny. Vytvořte nový soubor s názvem async3.py a přidejte následující kód. V tomto příkladu jsou pro budoucnost přiřazeny dva úkoly. show_message zde je deklarována funkce pro tisk zprávy před provedením korutinu a po dokončení spuštění. První úkol počká na 2 sekundy a dokončí se jako poslední. Druhý úkol počká 1 sekundu a dokončí se jako první.

importovat asyncio
async def show_message (číslo, počkejte):
# Vytiskněte zprávu
print (f'Task number is running ')
# Počkejte na přidělené sekundy
čekat asyncio.spát (počkat)
print (f'Task number is completed ')
async def stop_after (když):
čekat asyncio.spát (když)
smyčka.stop()
async def main ():
# Přiřadit první úkol
task1 = asyncio.zajistit_futura (show_message (1,2))
print ('Schedule 1')
# Přiřaďte druhý úkol
task2 = asyncio.zajistit_future (show_message (2,1))
print ('Schedule 2')
# Spusťte úkoly asynchronně
čekat asyncio.počkat ([task1, task2])
pokud __name__ == '__main__':
# Deklarovat smyčku události
loop = asyncio.get_event_loop ()
# Spusťte kód hlavní metody, dokud nedokončíte všechny úlohy
smyčka.run_until_complete (main ())

Výstup:

$ python3 async3.py

Ve výstupu se zobrazuje, že úkol1 je spuštěn jako první a dokončen jako poslední, a úkol2 je spuštěn později, ale dokončen jako první pro krátkou čekací dobu.

Závěr

Zde je vysvětlen základní koncept asynchronního programování pomocí asynciové knihovny pythonu. Doufám, že po procvičení příkladů tohoto tutoriálu budete moci v Pythonu psát vícevláknový kód.

Hry Nejlepší hry z příkazového řádku pro Linux
Nejlepší hry z příkazového řádku pro Linux
Příkazový řádek není při používání Linuxu jen vaším největším spojencem - může být také zdrojem zábavy, protože jej můžete použít k hraní mnoha zábavn...
Hry Nejlepší aplikace pro mapování gamepadu pro Linux
Nejlepší aplikace pro mapování gamepadu pro Linux
Pokud rádi hrajete hry na Linuxu s gamepadem místo typického vstupního systému pro klávesnici a myš, máte k dispozici několik užitečných aplikací. Mno...
Hry Užitečné nástroje pro hráče Linuxu
Užitečné nástroje pro hráče Linuxu
Pokud rádi hrajete hry na Linuxu, je pravděpodobné, že jste ke zlepšení herního zážitku použili aplikace a nástroje jako Wine, Lutris a OBS Studio. Kr...