python - 在不使用 Apache 的生产环境中运行 Python Pyramid 服务器
问题描述
所以我们过去常常在生产环境中使用 Apache 运行我们的 Pyramid 服务器。但是我们正在转向 Docker 容器化,以便更轻松地部署产品等,并且我们希望坚持“每个容器一个进程”的理念......所以我们只需要 1 个 python proc,而不是在容器中运行 Apache + 4 个 python proc。
所以我的问题是 - 有没有办法直接在生产中运行 Pyramid 服务器?不使用 WSGI+Apache?
我的理解是 pserve 仅用于开发?
创建一个application.py
文件并用以下内容填充它:
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
def hello_world(request):
return Response('<h1>Hello world!</h1>')
if __name__ == '__main__':
config = Configurator()
config.add_view(hello_world)
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
以上是否可以作为生产级服务器使用?
解决方案
最新的官方建议是每个容器一个问题。来自Docker 文档(强调我自己的):
每个容器应该只有一个关注点。将应用程序解耦到多个容器中,可以更轻松地水平扩展和重用容器。例如,一个 Web 应用程序堆栈可能由三个独立的容器组成,每个容器都有自己独特的图像,以分离的方式管理 Web 应用程序、数据库和内存缓存。
将每个容器限制为一个进程是一个很好的经验法则,但这不是一个硬性规定。例如,不仅容器可以使用 init 进程生成,某些程序可能会自行生成其他进程。例如,Celery 可以产生多个工作进程,而 Apache 可以为每个请求创建一个进程。
在您的情况下,您的 Web 应用程序服务器是一个问题。运行 Apache+WSGI 完全没问题。不用担心流程——那是 Apache 的工作。
为了更好地理解“一个关注点”规则,这篇文章很好地概述了它试图解决的问题。
推荐阅读
- nodatime - 尝试将 Microsoft Windows BCL 区域映射到 Tzdb 区域以访问其缩写值
- javascript - 如何从 Nuxt.js SPA 运行 Python 脚本?
- angular - 从子出口角度导航到根?
- javascript - vue v-if="isEditable" @click.prevent
- c# - 从用户控件访问主窗口
- sql-server - 在eclipse上的maven web项目中连接JDBC
- android - 不要在单击上居中标记
- javascript - 如何手动取消选中/选中primeng复选框
- python - 为什么是
.format 在我继承的类对象中给了我这个奇怪的输出?(蟒蛇新手) - java - JMockit 等效于 whenNew