如何在asyncio.sleep中使用“结果”和“循环”参数?

时间:2019-02-25 18:04:41

标签: python python-asyncio

python 3.6.8 documentation中提取。

  

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

     

创建一个在给定时间(以秒为单位)后完成的协程。如果提供了结果,则在协程完成时将结果提供给调用方。

问题1:第二句话是什么意思,即“如果提供了结果,...”?我不了解如何使用result参数。可以提供一个示例来说明其用法吗?

问题2:什么时候应使用loop参数?可以举一个例子来说明它的用法吗?

1 个答案:

答案 0 :(得分:2)

  

我不知道如何使用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 deprecated and scheduled for removal起。当不能保证asyncio.get_event_loop()的返回值不是当前正在运行的事件循环,而是与线程关联的事件循环时,它在Python 3.5及更早版本中很有用。由于一个线程的生命周期内可以运行多个事件循环,因此正确的代码必须在各处传播显式loop。如果您在非默认事件循环中运行,则必须指定loopasyncio.sleep以及大多数其他异步函数和构造函数。这种样式在旧教程中经常遇到,如今已actively discouraged