【发布时间】:2015-03-25 09:47:44
【问题描述】:
我正在尝试使用 Python 的 asyncio 模块创建一个异步应用程序。但是,我可以在文档中找到的所有实现都基于单个事件循环。
有什么方法可以启动多个运行同一个应用程序的事件循环,从而实现高可用性和容错?换句话说,我想通过插入新节点来横向扩展我的应用程序,这些节点将在负载均衡器后面共享协同程序的执行。
我知道异步编程和线程安全之间存在一个固有的问题,也许我的想法甚至是不可能的。如果是这样,如何在异步架构上避免这种 SPOF?
【问题讨论】:
-
你说的是抽象网络代码还是像aiohttp这样的特定网络服务器?
-
你可以运行多个事件循环,但我猜你可能想运行你的 asyncio 程序的多个实例并使用 nginx 或其他一些网络服务器来对它们进行负载平衡。如果那是您正在寻找的东西,我认为您可以获得有关 serverfault 的帮助
-
我相信建议是每个进程一个事件循环。如果单个事件循环进程受计算约束,您可以将其克隆到在其他内核上运行的其他进程,正如@leech 建议的那样,但您最好只分出计算任务。我相信 asyncio 有一个多处理接口,我现在还没有看过。
-
@TerryJanReedy 用于处理多个进程的唯一内置接口是
BaseEventLoop.run_in_executor,使用ProcessPoolExecutor作为执行器。
标签: python python-3.x asynchronous python-asyncio