Как использовать аргументы «result» и «loop» в asyncio.sleep? - PullRequest
0 голосов
/ 25 февраля 2019

Извлечено из документации python 3.6.8 .

coroutine asyncio.sleep(delay, result=None, *, loop=None)

Создать сопрограмму, которая завершается через заданное время (в секундах).Если результат предоставлен, он вызывается вызывающей стороной, когда сопрограмма завершается.

Вопрос 1: Что означает второе предложение, т. Е. «Если результат предоставлен, ..... "?Я не понимаю, как использовать аргумент result.Можно ли привести пример, иллюстрирующий его использование?

Вопрос 2: Когда следует использовать аргумент loop?Можно ли привести пример, чтобы проиллюстрировать его использование?

1 Ответ

0 голосов
/ 25 февраля 2019

Я не понимаю, как использовать аргумент result.

result - это просто значение, которое будет возвращено asyncio.sleep по истечении указанного времени.Это полезно, если вы заменяете что-то, что возвращает фактические данные, на sleep(), например, для целей тестирования вы можете сразу указать возвращаемое значение.Например:

data = await read_from_database()
...

if mocking:
    read_from_database = functools.partial(
        asyncio.sleep, 0.1, result='no data')
else:
    async def read_from_database():
        ... real implementation ...

Когда следует использовать аргумент loop?

Аргумент loop с Python 3.7 устарел ипланируется удалить .Это было полезно в Python 3.5 и более ранних версиях, когда не гарантировалось, что возвращаемое значение asyncio.get_event_loop() будет текущим циклом событий, а циклом событий, связанным с потоком.Поскольку в течение времени жизни потока можно запускать несколько циклов событий, правильный код должен был распространять явное loop везде.Если вы работали в цикле событий не по умолчанию, вам нужно было указать от loop до asyncio.sleep и большинство других асинхронных функций и конструкторов.Этот стиль часто встречается в старых уроках и в настоящее время активно не поощряется .

...