我有一个带有以下伪代码的简单 python 函数:
while True:
# 1 - CPU Intensive calculations(Synchronous)
# 2 - Take the result from the synchronous calculation and POST it to a server
while 循环永远运行,并在循环的前半部分进行 CPU 密集型计算。所有这些都是同步运行的,没关系。我想做的是通过使 POST 请求异步来节省一些时间。while 循环需要永远运行,但是我希望异步发出请求,以便循环可以继续下一次迭代,而无需等待请求解决。
想知道在不使用任何额外线程/greenlets/processes 的情况下使用 asyncio 实现这一目标的最佳方法是什么
编辑
在这里发布问题之前,我已经尝试过这种方法:
async def example_function():
# Synchronous CPU Intensive calculations
client = httpx.AsyncClient()
# Make a call to the REST API
await client.post()
async def main():
while True:
await asyncio.gather(example_function(), example_function())
if __name__ == "__main__":
asyncio.run(main())
我对使用 python 进行异步编程完全陌生。我尝试了收集方法,但是我的实现方法的缺陷是 example_function() 的第二次迭代不会异步生成 POST req。我知道 asyncio.gather() 基本上为传递给它的每个函数安排了一个任务,我有一个任务在等待,它继续执行下一个任务。但是,我需要永远在循环中运行 example_function() 而不仅仅是n次