Библиотека knigago >> Компьютеры и Интернет >> Учебники и самоучители по компьютеру >> Основы программирования на python


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 1065, книга: Граница
автор: Алберт Бэл

"Граница", роман выдающегося русского писателя Алберта Бэла, является захватывающим и глубоко проницательным исследованием человеческой психологии и общества. Изданная в 1939 году, книга вызвала шквал споров и остается актуальным и провокационным произведением по сей день. Действие романа происходит в пограничном городке на юге России. Главный герой, Никита Косолапов, молодой и амбициозный офицер Красной Армии, разрывается между лояльностью к режиму и своим собственным нравственным...

СЛУЧАЙНАЯ КНИГА

Неспетая песня. Тея Лав
- Неспетая песня

Жанр: Современные любовные романы

Год издания: 2018

Серия: Однажды на озере Тахо

Основы программирования на python

Основы программирования на python
Книга - Основы программирования на 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

Объявляем задачу
Ожидание выполнения задачи: --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.