Python

Учебное пособие по Python Asyncio

Учебное пособие по Python Asyncio
Библиотека asyncio представлена ​​в Python 3.4 для выполнения однопоточных параллельных программ. Эта библиотека популярна среди других библиотек и фреймворков своей впечатляющей скоростью и разнообразием использования. Эта библиотека используется в Python для создания, выполнения и структурирования сопрограмм и одновременной обработки нескольких задач без параллельного выполнения задач. Основные части этой библиотеки определены ниже:

Coroutine: Часть кода, которая может быть приостановлена ​​и возобновлена ​​в многопоточном скрипте, называется сопрограммой. сопрограммы работают совместно в многопоточной программе. Когда одна сопрограмма приостанавливается, другая сопрограмма может выполнить.

Цикл событий: Он используется для запуска выполнения сопрограмм и обработки операций ввода / вывода. Требуется несколько задач и их выполнение.

Задача: Выполнение и результат сопрограмм определяются задачами. Вы можете назначать несколько задач с помощью библиотеки asyncio и запускать задачи асинхронно.

Будущее: Он действует как будущее хранилище, где результат сопрограмм будет храниться после завершения. Это полезно, когда любая сопрограмма требует дождаться результата другой сопрограммы.

Как вы можете реализовать вышеупомянутые концепции библиотеки asyncio показано в этом руководстве на нескольких простых примерах.

Пример-1: Создание единой сопрограммы с единственной задачей

Создайте файл с именем async1.ру и добавьте следующий код. библиотека asyncio импортируется для использования функций этой библиотеки. Добавлять объявлена ​​функция для вычисления суммы определенного диапазона чисел. Диапазон номеров от 1 до 101 назначается задачей с задержкой в ​​одну секунду. Цикл событий объявлен, что он будет выполняться до тех пор, пока не будут выполнены все задачи основного метода. После вычисления значения функция подождет одну секунду и распечатает результат.

импортировать asyncio
async def add (начало, конец, подождите):
# Инициализировать переменную суммы
сумма = 0
# Вычислить сумму всех чисел
для n в диапазоне (начало, конец):
сумма + = п
# Подождите назначенные секунды
ждать asyncio.спать (ждать)
# Распечатать результат
print (f'Sum from start to end is sum ')
async def main ():
# Назначьте одну задачу
задача = цикл.create_task (добавить (1,101,1))
# Выполнить задачу асинхронно
ждать asyncio.ждать ([задача])
если __name__ == '__main__':
#Declare цикл событий
цикл = asyncio.get_event_loop ()
# Запускаем код до завершения всей задачи
петля.run_until_complete (главная ())
# Замкнуть петлю
петля.Закрыть()

Выход:

$ python3 async1.ру

Вывод показывает сумму от 1 до 101, что составляет 5050.

Пример-2: Создание нескольких сопрограмм

Использование библиотеки asyncio будет отключено, когда вы будете запускать несколько сопрограмм одновременно. Создайте новый файл с именем async2.ру и добавьте следующий код. Генерируются три задачи с тремя разными диапазонами и значениями ожидания в основной() метод. Первая задача вычислит сумму от 5 до 500000, подождав 3 секунды, вторая задача вычислит сумму от 2 до 300000, подождав 2 секунды, а третья задача вычислит сумму от 10 до 1000, подождав 1 секунду. Сначала будет завершена задача с низкими значениями ожидания, а наконец завершится задача с высоким значением ожидания.

импортировать asyncio
async def add (начало, конец, подождите):
# Инициализировать переменную суммы
сумма = 0
# Вычислить сумму всех чисел
для n в диапазоне (начало, конец):
сумма + = п
# Подождите назначенные секунды
ждать asyncio.спать (ждать)
# Распечатать результат
print (f'Sum from start to end is sum ')
async def main ():
# Назначить первую задачу
task1 = цикл.create_task (добавить (5,500000,3))
# Назначить вторую задачу
task2 = цикл.create_task (добавить (2,300000,2))
# Назначить третью задачу
task3 = цикл.create_task (добавить (10,1000,1))
# Выполнять задачи асинхронно
ждать asyncio.ждать ([задача1, задача2, задача3])
если __name__ == '__main__':
#Declare цикл событий
цикл = asyncio.get_event_loop ()
# Запускаем код до завершения всей задачи
петля.run_until_complete (главная ())
# Замкнуть петлю
петля.Закрыть()

Выход:

$ python3 async1.ру

Выходные данные показывают, что задача 3 выполняется первой, потому что время ожидания этой задачи составляло всего 1 секунду, а задача 1 завершается последней, поскольку время ожидания этой задачи составляло 3 секунды.

Пример-3: сопрограммы с будущим

В этом примере показано использование будущего объекта библиотеки asyncio. Создайте новый файл с именем async3.ру и добавьте следующий код. В этом примере на будущее поставлены две задачи. show_message здесь объявлена ​​функция для печати сообщения перед выполнением сопрограммы и после завершения выполнения. Первая задача будет ждать 2 секунды и завершится последней. Вторая задача будет ждать 1 секунду и завершится первой.

импортировать asyncio
async def show_message (число, подождите):
# Распечатать сообщение
print (f'Task number выполняется ')
# Подождите назначенные секунды
ждать asyncio.спать (ждать)
print (f'Task number завершен ')
async def stop_after (когда):
ждать asyncio.спать (когда)
петля.останавливаться()
async def main ():
# Назначить первую задачу
task1 = asyncio.sure_future (show_message (1,2))
print ('Расписание 1')
# Назначить вторую задачу
task2 = asyncio.sure_future (show_message (2,1))
print ('Расписание 2')
# Выполнять задачи асинхронно
ждать asyncio.ждать ([задача1, задача2])
если __name__ == '__main__':
#Declare цикл событий
цикл = asyncio.get_event_loop ()
# Запустить код основного метода до завершения всей задачи
петля.run_until_complete (главная ())

Выход:

$ python3 async3.ру

В выходных данных показано, что задача 1 запускается первой и завершается последней, а задача 2 запускается позже, но завершается первой в течение короткого времени ожидания.

Заключение

Основная концепция асинхронного программирования с использованием библиотеки asyncio Python объясняется здесь. Надеюсь, вы сможете писать многопоточный код на python, попрактиковавшись в примерах из этого руководства.

Как разработать игру в Linux
Десять лет назад не многие пользователи Linux могли бы предсказать, что их любимая операционная система однажды станет популярной игровой платформой д...
Порты коммерческих игровых движков с открытым исходным кодом
Бесплатные игры с открытым исходным кодом и кроссплатформенные версии игрового движка можно использовать для игры как в старые, так и в некоторые из с...
Лучшие игры с командной строкой для Linux
Командная строка - не только ваш главный союзник при использовании Linux - она ​​также может быть источником развлечений, потому что вы можете использ...