如何在 asyncio.sleep 中使用 "result" 和 "loop" 参数?



从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函数和构造函数。这种样式经常在旧教程中遇到,如今正在积极灰心。

最新更新