Програма: Частта от кода, която може да бъде поставена на пауза и възобновена в многонишков скрипт, се нарича съпрограма. съпрограмите работят съвместно в многонишкова програма. Когато една съпрограма прави пауза, тогава друга програма може да се изпълни.
Цикъл на събитие: Използва се за стартиране на изпълнението на съпрограми и обработка на операции по въвеждане / извеждане. Необходими са множество задачи и ги изпълнете.
Задача: Изпълнението и резултатът от съпрограмите се определят от задачите. Можете да зададете няколко броя задачи, като използвате библиотеката asyncio и да ги изпълнявате асинхронно.
Бъдеще: Той действа като бъдещо хранилище, където резултатът от съпрограмите ще се съхранява след завършване. Това е полезно, когато всяка съпрограма изисква да изчака резултата от друга съпрограма.
Как можете да приложите горните концепции за библиотеката asyncio е показано в този урок, като използвате някои прости примери.
Пример-1: Създайте единична програма с една задача
Създайте файл с име async1.py и добавете следния код. asyncio библиотека се импортира, за да използва функциите на тази библиотека. добавете декларирана функция за изчисляване на сумата на определен диапазон от числа. Числовият диапазон от 1 до 101 се задава от задачата с една секунда закъснение. Цикълът на събитията е деклариран, че ще се изпълнява до завършване на всички задачи на основния метод. След изчисляване на стойността, функцията ще изчака една секунда и ще отпечата резултата.
внос asyncioasync def add (start, end, wait):
# Инициализира променлива сума
сума = 0
# Изчислете сумата от всички числа
за n в обхват (начало, край):
сума + = n
# Изчакайте за зададени секунди
изчакайте асинсио.спи (изчакай)
# Отпечатайте резултата
print (f'Sum от start до end е sum ')
async def main ():
# Присвояване на една задача
задача = цикъл.create_task (add (1,101,1))
# Изпълнете задачата асинхронно
изчакайте асинсио.изчакайте ([задача])
ако __name__ == '__main__':
# Декларирайте цикъл на събитие
цикъл = asyncio.get_event_loop ()
# Пуснете кода, докато завършите цялата задача
цикъл.run_until_complete (main ())
# Затворете цикъла
цикъл.близо()
Изход:
$ python3 async1.pyРезултатът показва сумата от 1 до 101, което е 5050.
Пример-2: Създайте множество съпрограми
Използването на библиотеката asyncio ще бъде изчистено, когато едновременно стартирате множество съпрограми. Създайте нов файл с име async2.py и добавете следния код. Генерират се три задачи с три различни диапазона и чакащи стойности в главен () метод. Първата задача ще изчисли сумата от 5 до 500000, като изчака 3 секунди, втората задача ще изчисли сумата от 2 до 300000, като изчака 2 секунди, а третата задача ще изчисли сумата от 10 до 1000, като изчака 1 секунда. Задачата с ниски стойности на изчакване ще завърши първо, а задачата с висока стойност на изчакване ще завърши най-накрая.
внос asyncioasync def add (start, end, wait):
# Инициализира променлива сума
сума = 0
# Изчислете сумата от всички числа
за n в обхват (начало, край):
сума + = n
# Изчакайте за зададени секунди
изчакайте асинсио.спи (изчакай)
# Отпечатайте резултата
print (f'Sum от start до end е sum ')
async def main ():
# Възлагане на първа задача
task1 = цикъл.create_task (добавяне (5,500000,3))
# Възлагане на втора задача
task2 = цикъл.create_task (добавяне (2 300 000, 2))
# Възлагане на трета задача
task3 = цикъл.create_task (добавяне (10,1000,1))
# Изпълнете задачите асинхронно
изчакайте асинсио.изчакайте ([задача1, задача2, задача3])
ако __name__ == '__main__':
# Декларирайте цикъл на събитие
цикъл = asyncio.get_event_loop ()
# Пуснете кода, докато завършите цялата задача
цикъл.run_until_complete (main ())
# Затворете цикъла
цикъл.близо()
Изход:
$ python3 async1.pyРезултатът показва, че task3 е завършен първи, защото времето за изчакване на тази задача е било само 1 секунда, а task1 е завършено последно, тъй като времето за изчакване на тази задача е 3 секунди.
Пример-3: съпрограми с бъдеще
Този пример показва използването на бъдещ обект на библиотеката asyncio. Създайте нов файл с име async3.py и добавете следния код. В този пример са зададени две задачи за бъдеще. show_message функцията е декларирана тук, за да отпечата съобщението преди изпълнение на съпрограмата и след завършване на изпълнението. Първата задача ще изчака 2 секунди, а завърши последната. Втората задача ще изчака 1 секунда и ще изпълни първата.
внос asyncioasync def show_message (номер, изчакайте):
# Отпечатайте съобщението
print (f'Task номер работи ')
# Изчакайте за зададени секунди
изчакайте асинсио.спи (изчакай)
print (f'Task номер е завършен ')
async def stop_after (когато):
изчакайте асинсио.сън (кога)
цикъл.Спри се()
async def main ():
# Възлагане на първа задача
task1 = asyncio.осигури бъдещето (show_message (1,2))
print ('График 1')
# Възлагане на втора задача
task2 = asyncio.осигури бъдещето (show_message (2,1))
печат („График 2“)
# Изпълнете задачите асинхронно
изчакайте асинсио.изчакайте ([задача1, задача2])
ако __name__ == '__main__':
# Декларирайте цикъл на събитие
цикъл = asyncio.get_event_loop ()
# Изпълнете кода на основния метод, докато завършите цялата задача
цикъл.run_until_complete (main ())
Изход:
$ python3 async3.pyВ изхода е показано, че task1 се стартира първо и завършва последно, а task2 се стартира по-късно, но се изпълнява първо за кратко време.
Заключение
Основната концепция за асинхронно програмиране с помощта на asyncio библиотека на python е обяснена тук. Надявам се, че ще можете да напишете многонишков код в python, след като отработите примерите от този урок.