从python 3.6.8文档提取。
coroutine asyncio.sleep(delay, result=None, *, loop=None)
创建一个在给定时间(以秒为单位)之后完成的Coroutine。如果提供结果,则在Coroutine完成后将其生成呼叫者。
问题1:第二句话是什么意思,即如果提供结果,.....&quot"?我不明白如何使用result
参数。可以提供一个示例以说明其使用吗?
问题2:何时应该使用loop
参数?还可以给出一个示例以说明其使用吗?
我不明白如何使用
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弃用并计划删除的。当asyncio.get_event_loop()
的返回值不能保证为当前运行的事件循环,而是与线程相关联的事件循环时,它在Python 3.5和更早的时候很有用。由于可以在线程的使用寿命中运行多个事件循环,因此正确的代码必须在任何地方传播明确的loop
。如果您在非默认事件循环中运行,则必须将loop
指定到asyncio.sleep
和大多数其他Asyncio函数和构造函数。这种样式经常在旧教程中遇到,如今正在积极灰心。