【发布时间】:2020-09-28 22:55:02
【问题描述】:
我已经订阅了一个 MQ 队列。每次收到消息时,我都会向它传递一个函数,然后对其执行一些耗时的 I/O 操作。
问题是一切都是连续发生的。
一个请求进来,它接收请求,通过调用函数执行操作,然后接收下一个请求。
我想异步执行此操作,以便可以异步方式处理多个请求。
results = []
queue = queue.subscribe(name)
async for message in queue:
yield my_funcion(message)
最大的问题是 my_function 很慢,因为它调用外部 Web 服务,我希望我的代码同时处理其他消息。
我试图在上面实现它,但它不起作用!我不确定如何在这里实现异步。
我无法创建任务,因为我不知道会收到多少请求。这是我订阅的 MQ。我遍历每条消息并执行一个动作。在对下一条消息执行操作之前,我不希望该功能完成。我希望它异步发生。
【问题讨论】:
-
你能澄清一下你的问题是什么吗?标题和正文似乎无关 - 在问题中没有尝试编写异步生成器或任何异步代码。编写
async生成器的工作方式与常规生成器相同——你这样做有什么具体问题?您显示的代码不是async,它与异步生成器有什么关系?你真的需要async,或者只是任何一种并发,比如线程? -
我想使用 async,这样我就可以异步运行 my_function,而无需在接收下一条消息之前等待每条消息的结果
-
那么你的问题是什么?如何异步调用函数?如何异步重写它?如何完成生成器?
标签: python python-3.x async-await python-asyncio