Основы программирования на python
Название: | Основы программирования на python | |
Автор: | ||
Жанр: | Учебники и самоучители по компьютеру | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | - | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Основы программирования на python"
Читаем онлайн "Основы программирования на python". [Страница - 77]
ссылке https://coderbooks.ru/books/python/
import asyncio
import functools
def callback(arg, kwarg='default'):
print(f'Вызов callback-функции arg= {arg}
f'kwarg = {kwarg}')
async def main(loop):
print('Регистрируем callback-функцию')
loop.call_soon(callback, 1)
wrapped = functools.partial(callback,
kwarg='A_A')
loop.call_soon(wrapped, "-_-")
await asyncio.sleep(0.2)
if __ name__ == "__ main__ " :
event_loop = asyncio.get_event_loop()
try:
print('Запуск цикла событий')
event_loop.run_until_complete(main(event_loop))
finally:
print('Остановка цикла событий')
event_loop.close()
I
I
I
Запуск цикла событий
Регистрируем callback-функцию
Вызов callback-функции arg= 1 kwarg = default
Вызов callback-функции arg= -_- kwarg = Л_Л
Остановка цикла событий
I
I
I
7.3.2. Асинхронное получение результатов
Для асинхронного извлечения результатов из сопрограмм мож
но использовать класс Future (фьючерс), который сам действует
подобно сопрограмме. Именно поэтому к фьючерсам применимы
любые приемы, используемые для ожидания завершения сопро
граммы. То есть экземпляр класса Future можно использовать вме
сте с ключевым словом await.
При этом экземпляры класса Future могут не только работать
как сопрограммы, но и запускать callback-функции при завершении
работы. Перед извлечением результата из экземпляра класса Future
у него должен вызываться метод set_result с передачей ему резуль
тирующего значения:
import asyncio
import functools
def callback(future, arg):
print(f'{arg}: результат future = '
f' {future.result()}')
216
Больше книг по языку Python по ссылке https://coderbooks.ru/books/python/
async def register_callbacks(all_done):
print('Регистрируем callback-функцию для '
' future')
all_done.add_done_callback(functools.partial(callback,
arg=l))
all_done.add_done_callback(functools.partial(callback,
arg=2))
async def main(all_done):
await register_callbacks(all_done)
print('Установка результирующего '
'значения future')
all_done.set_result({"-_-": 10, "Л_Л": 20})
if __ name__ == "__ main__ ":
event_loop = asyncio.get_event_loop()
try:
all_done = asyncio.Future()
event_loop.run_until_complete(main(all_done))
finally:
print(f"Основной процесс: "
f" {all_done.result()}")
event_loop.close()
# 1: результат future =
10, ,л_л': 20}
# 2: результат future =
10, 'л_л': 20}
# Основной процесс: {': 10, 'л_л': 20}
7.3.3. Параллельное выполнение задач
Задачи (Task) — один из основных способов взаимодействия
с циклом событий. Они являются обертками над сопрограммами
и отслеживают момент их завершения. Так как задачи являются
производным классом от Future, то наследуют часть его функцио
нальности, а именно:
— другие сопрограммы могут ожидать завершения задач;
— каждая задача имеет результат, который может быть извле
чен после ее завершения.
Чтобы создать экземпляр класса Task, необходимо у объекта
цикла события вызвать метод create_task. Результирующая задача
будет выполняться как часть параллельных операций, управляемых
циклом событий, до тех пор, пока выполняется цикл и сопрограмма
не возвращает управление.
До момента завершения задачи ее можно отменить, вызвав у эк
земпляра класса метод cancel и тем самым сгенерировав исключе
ние CancelledError, которое будет необходимо обработать.
Давайте приведем пример работы с задачами:
import asyncio
async def task_test():
print('Выполняем задачу')
return (30,
[4.6, "o_0"])
217
Больше книг по языку Python по ссылке https://coderbooks.ru/books/python/
async def main(loop):
print('Объявляем задачу')
task = loop.create_task(task_test())
print(f'Ожидание выполнения задачи: {task}')
return_value = await task
print(f'Завершение задачи: {task}')
print(f‘Результат работы задачи: '
f'{return_value}')
if __ name__ == "__ main__ " :
event_loop = asyncio.get_event_loop()
try:
event_loop.run_until_complete(main(event_loop))
finally:
event_loop.close()
I
I
I
Объявляем задачу
Ожидание выполнения задачи: --">
import asyncio
import functools
def callback(arg, kwarg='default'):
print(f'Вызов callback-функции arg= {arg}
f'kwarg = {kwarg}')
async def main(loop):
print('Регистрируем callback-функцию')
loop.call_soon(callback, 1)
wrapped = functools.partial(callback,
kwarg='A_A')
loop.call_soon(wrapped, "-_-")
await asyncio.sleep(0.2)
if __ name__ == "__ main__ " :
event_loop = asyncio.get_event_loop()
try:
print('Запуск цикла событий')
event_loop.run_until_complete(main(event_loop))
finally:
print('Остановка цикла событий')
event_loop.close()
I
I
I
Запуск цикла событий
Регистрируем callback-функцию
Вызов callback-функции arg= 1 kwarg = default
Вызов callback-функции arg= -_- kwarg = Л_Л
Остановка цикла событий
I
I
I
7.3.2. Асинхронное получение результатов
Для асинхронного извлечения результатов из сопрограмм мож
но использовать класс Future (фьючерс), который сам действует
подобно сопрограмме. Именно поэтому к фьючерсам применимы
любые приемы, используемые для ожидания завершения сопро
граммы. То есть экземпляр класса Future можно использовать вме
сте с ключевым словом await.
При этом экземпляры класса Future могут не только работать
как сопрограммы, но и запускать callback-функции при завершении
работы. Перед извлечением результата из экземпляра класса Future
у него должен вызываться метод set_result с передачей ему резуль
тирующего значения:
import asyncio
import functools
def callback(future, arg):
print(f'{arg}: результат future = '
f' {future.result()}')
216
Больше книг по языку Python по ссылке https://coderbooks.ru/books/python/
async def register_callbacks(all_done):
print('Регистрируем callback-функцию для '
' future')
all_done.add_done_callback(functools.partial(callback,
arg=l))
all_done.add_done_callback(functools.partial(callback,
arg=2))
async def main(all_done):
await register_callbacks(all_done)
print('Установка результирующего '
'значения future')
all_done.set_result({"-_-": 10, "Л_Л": 20})
if __ name__ == "__ main__ ":
event_loop = asyncio.get_event_loop()
try:
all_done = asyncio.Future()
event_loop.run_until_complete(main(all_done))
finally:
print(f"Основной процесс: "
f" {all_done.result()}")
event_loop.close()
# 1: результат future =
10, ,л_л': 20}
# 2: результат future =
10, 'л_л': 20}
# Основной процесс: {': 10, 'л_л': 20}
7.3.3. Параллельное выполнение задач
Задачи (Task) — один из основных способов взаимодействия
с циклом событий. Они являются обертками над сопрограммами
и отслеживают момент их завершения. Так как задачи являются
производным классом от Future, то наследуют часть его функцио
нальности, а именно:
— другие сопрограммы могут ожидать завершения задач;
— каждая задача имеет результат, который может быть извле
чен после ее завершения.
Чтобы создать экземпляр класса Task, необходимо у объекта
цикла события вызвать метод create_task. Результирующая задача
будет выполняться как часть параллельных операций, управляемых
циклом событий, до тех пор, пока выполняется цикл и сопрограмма
не возвращает управление.
До момента завершения задачи ее можно отменить, вызвав у эк
земпляра класса метод cancel и тем самым сгенерировав исключе
ние CancelledError, которое будет необходимо обработать.
Давайте приведем пример работы с задачами:
import asyncio
async def task_test():
print('Выполняем задачу')
return (30,
[4.6, "o_0"])
217
Больше книг по языку Python по ссылке https://coderbooks.ru/books/python/
async def main(loop):
print('Объявляем задачу')
task = loop.create_task(task_test())
print(f'Ожидание выполнения задачи: {task}')
return_value = await task
print(f'Завершение задачи: {task}')
print(f‘Результат работы задачи: '
f'{return_value}')
if __ name__ == "__ main__ " :
event_loop = asyncio.get_event_loop()
try:
event_loop.run_until_complete(main(event_loop))
finally:
event_loop.close()
I
I
I
Объявляем задачу
Ожидание выполнения задачи: --">
Книги схожие с «Основы программирования на python» по жанру, серии, автору или названию:
М. В. Сысоева, И. В. Сысоев - Программирование для «нормальных» с нуля на языке Python. Часть 1 Жанр: Учебники и самоучители по компьютеру Серия: Библиотека ALT |