【问题标题】:Does a coroutine which does not `await` anything differ from a function?不“等待”的协程与函数有什么不同吗?
【发布时间】:2020-01-04 00:34:36
【问题描述】:

我想知道是否有任何理由将一段代码声明为 await 而不是 async def(协程)而不是 def(函数)? Python 明确允许这样做。

def i_am_sync():
    return 42

async def i_am_async():
    return 42

我知道协程版本可以安排在事件循环上,但我无法想象它有什么实际应用,因为你可以直接调用同步代码?

【问题讨论】:

  • 将其声明为异步允许您更改实现以等待某些内容。

标签: python python-3.x asynchronous async-await python-asyncio


【解决方案1】:

如果函数不包含异步内容并且您认为它会保持这种状态,则无需声明它async。有人可能会争辩说,最好不要无缘无故地使函数异步,因为这样可以更好地将同步世界与异步分开(如果你真的对为什么感兴趣,你可能想阅读this article,尤其是结论“如何使用彩色函数”) .

但请注意,“异步内容”可能不仅与某些网络 I/O 相关,还可能与其他诸如 CPU 密集型操作或磁盘 I/O 之类的事情有关,您可能想要 run in thread or process and await for the result

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2020-11-02
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多