从python 3.6.8 documentation中提取。
coroutine asyncio.sleep(delay, result=None, *, loop=None)
创建一个在给定时间(以秒为单位)后完成的协程。如果提供了结果,则在协程完成时将结果提供给调用方。
问题1:第二句话是什么意思,即“如果提供了结果,...”?我不了解如何使用result
参数。可以提供一个示例来说明其用法吗?
问题2:什么时候应使用loop
参数?可以举一个例子来说明它的用法吗?
答案 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
。如果您在非默认事件循环中运行,则必须指定loop
至asyncio.sleep
以及大多数其他异步函数和构造函数。这种样式在旧教程中经常遇到,如今已actively discouraged。