可以在同一进程中运行两个 aiohttp.web.Application()
对象,例如在不同的港口?
我看到一堆aiohttp代码示例:
from aiohttp import web
app = web.Application()
app.router.add_get('/foo', foo_view, name='foo')
web.run_app(app, host='0.0.0.0', port=10000)
我'm wondering if there'是一些等价物,其中多个 web.Applications()
可以配置为同时运行 . 就像是:
from aiohttp import web
app1 = web.Application()
app1.router.add_get('/foo', foo_view, name='foo')
app2 = web.Application()
app2.router.add_get('/bar', bar_view, name='bar')
# This is the wishful thinking code:
web.configure_app(app1, host='0.0.0.0', port=10000)
web.configure_app(app2, host='0.0.0.0', port=10001)
web.run_apps()
我的用例是我有一个现有的python web框架来做这种事情,我正在构建一个类似于python 3.6和aiohttp的原型 .
据我所知,多个python服务器可以在后面运行,例如nginx(另见http://aiohttp.readthedocs.io/en/stable/deployment.html);之后's not what I'米 . 我想探索两个具有相同asyncio事件循环的aiohttp Web服务器的可能性,在同一个python进程中运行,在两个不同的端口上提供服务 .
2 回答
是的,你可以 - 只需编写一些包装,重新实现run_app .
这是一个简单的例子 .
run_app
的所有特定于应用程序的部分都将移至专用类AppWrapper
.MultiApp
仅负责初始化所有已配置的应用程序,继续运行循环并清理 .Note :注意使用内部
aiohttp
的方法,可能会有所变化 .现在让我们使用它:
作为旁注,请再想一想为什么需要这个 . 在几乎所有情况下,解耦是更好的选择 . 在同一进程中设置多个 endpoints 使它们相互依赖 . 有一种情况出现在我的脑海中并具有“好”的推理,内部统计/调试 endpoints .
虽然上面的答案已被接受,但这是另一种方法:
创建test.py:
在终端,打开两个选项卡 . 在一个选项卡中,运行
在其他选项卡中,运行
你会得到回应