在不使用Apache的生产环境中运行Python Pyramid服务器

时间:2019-09-11 17:56:45

标签: python apache pyramid wsgi amazon-ecs

因此,我们曾经在生产环境中使用Apache运行Pyramid服务器。但是我们正在转向Docker容器化,以便更轻松地进行产品部署等,并且我们希望坚持“每个容器一个进程”的理念。.因此,我们只希望使用1个python proc,而不是在容器中运行Apache + 4个python proc。

所以我的问题是-有没有一种方法可以直接在生产环境中运行Pyramid服务器?不使用WSGI + Apache吗?

https://www.digitalocean.com/community/tutorials/how-to-use-the-pyramid-framework-to-build-your-python-web-app-on-ubuntu

我的理解是,保留只是为了发展吗?

创建一个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()

以上内容可以用作生产级服务器吗?

3 个答案:

答案 0 :(得分:1)

最新的官方建议是每个集装箱一个问题。在Docker docs中(强调我自己):

  

每个容器应该只关注一个问题。分离应用程序   放入多个容器中,可以更轻松地水平缩放   重用容器。例如,Web应用程序堆栈可能包含   三个独立的容器,每个容器都有自己的独特图片,   管理Web应用程序,数据库和内存中的缓存   解耦的方式。

     

将每个容器限制为一个进程是一个很好的经验法则,但是   这不是硬性规定。例如,不仅容器可以   通过初始化进程生成,某些程序可能生成其他程序   自行处理。 例如,芹菜可以产生多个   工作进程,Apache可以为每个请求创建一个进程。

在您的情况下,您的Web应用程序服务器只是一个问题。运行Apache + WSGI完全可以。不用担心流程-那是Apache的工作。

为了更好地理解“一个关注”规则,this post很好地概述了其试图解决的问题。

答案 1 :(得分:0)

您可以使用Waitress,根据他们的文档,它是

  

...意味着要成为具有生产质量的纯Python WSGI服务器,   可接受的性能。除了存在的依赖项之外,它没有任何依赖项   在Python标准库中。

女服务生就像金字塔一样,是Pylons Project的一部分。

答案 2 :(得分:0)

当直接运行Python时,Bjoern似乎是一个不错的选择,因为Python服务器具有WSGI绑定:

https://www.appdynamics.com/blog/engineering/a-performance-analysis-of-python-wsgi-servers-part-2/

https://github.com/jonashaag/bjoern