python-3.x - 在普通(同步)方法中阻止“异步”方法的结果
问题描述
假设我的算法中有一个异步“核心”,旨在返回最终结果。
还有一些必须在前后运行的同步部分。喜欢:
async def algo_async(x):
await ...
return result
def run():
x = prepare()
r = ???(algo_async(x)) #< What here?
post(r)
解决方案
异步函数可以(并且应该)由事件循环运行,例如:
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
)
但是请注意,首先使函数异步的主要原因是能够与其他异步函数同时运行它。当你在同步函数中运行异步函数时,你将失去这种能力和所有相关的好处。
这就是为什么人们通常使事件循环运行整个程序的入口点并使用使所有需要运行异步函数的函数也异步。
推荐阅读
- javascript - 如何设置 chrome selenium 窗口大小以匹配不同机器的尺寸?
- python - 在 Tensorflow 中计算均方对数误差返回 nan
- algorithm - 集群重编程和云重编程有什么区别?
- node.js - Heroku - 无法从 github 安装包
- aws-api-gateway - 与 AWS API 网关和 express stepfunctions 同步 RestAPI
- javascript - 如何使用 Nginx 提供文件文件夹?
- apache-nifi - 寻找 GenerateTableFetch 的等价物
- entity-framework - 通过 DI 创建的对象的构造函数中使用的 DbContext 的异步问题
- geometry - 使用 Chart.js 以相对于数据的固定角度绘制一条线
- python - 尝试转换为 .exe 时无法识别 Pyinstaller