[英]Consuming events from multiple Azure Event Hubs in one Python program
我有两个事件中心,每个都有自己的消费者群体。 我想同时从他们每个人那里接收事件,但我在GitHub 示例中没有看到与此相关的任何内容。
更具体地说,我想利用asyncio
同时阅读这两个主题,但我是异步编程的新手,我无法弄清楚。 我尝试过这样的事情,但它从未继续使用client2
阅读:
async with client1:
async with client2:
await client1.receive_batch(...)
await client2.receive_batch(...)
我还尝试将async with
语句分开,甚至尝试在on_event_batch
函数中添加await asyncio.sleep(1)
,只是为了确保将控制权交还给事件循环。
在这一点上,我不确定asyncio
是否无法实现我想要做的事情,或者我只是不知道如何使用它。
任何帮助将不胜感激,谢谢!
receive_batch
被设计为一个阻塞调用,它可以无限地从事件中心抽取事件。
为了促进asyncio
并发执行协程任务,您可以使用asyncio.create_task
来执行receive_batch
。
示例代码:
async with client1, client2:
future1 = asyncio.create_task(client1.receive_batch(...))
future2 = asyncio.create_task(client2.receive_batch(...))
results = await asyncio.gather(future1, future2) # program will be blocking here waiting for two coroutines to finish
对于 asyncio 模块的更高级用法,我建议您查看Coroutines 和 Tasks的官方 Python 文档。
如果还有什么我可以帮忙的,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.