繁体   English   中英

在一个 Python 程序中使用来自多个 Azure 事件中心的事件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM