首页 > 解决方案 > 在普通(同步)方法中阻止“异步”方法的结果

问题描述

假设我的算法中有一个异步“核心”,旨在返回最终结果。

还有一些必须在前后运行的同步部分。喜欢:

async def algo_async(x):
    await ...
    return result
def run():
    x = prepare()
    r = ???(algo_async(x)) #< What here?
    post(r)

标签: python-3.xpython-asyncio

解决方案


异步函数可以(并且应该)由事件循环运行,例如:

def run():
    x = prepare()
    r = asyncio.run(algo_async(x))
    post(r)

(如果你有 Python < 3.7 使用asyncio.get_event_loop().run_until_complete(algo_async(x))而不是asyncio.run


但是请注意,首先使函数异步的主要原因是能够与其他异步函数同时运行它。当你在同步函数中运行异步函数时,你将失去这种能力和所有相关的好处。

这就是为什么人们通常使事件循环运行整个程序的入口点并使用使所有需要运行异步函数的函数也异步。


推荐阅读