Python瓶vs uwsgi / bottle vs nginx / uwsgi / bottle

时间:2013-08-01 22:53:51

标签: python nginx uwsgi bottle

我正在开发一个基于Python的应用程序(HTTP-REST或jsonrpc接口),它将用于生产自动化测试环境。这将连接到运行所有测试脚本的Java客户端。即,不需要人工访问(除了测试应用程序本身)。

我们希望在Raspberry Pi上部署它,所以我希望它相对较快且占用空间小。它可能不会获得大量请求(在最大负载下,可能是每秒几次),但它应该能够运行并在很长一段时间内保持稳定。

由于其简单性(一个文件),我已经确定了Bottle作为框架。这是对Flask的折腾。任何认为Flask可能会更好的人,让我知道原因。

我对Bottle的内置HTTP服务器的稳定性有点不确定,所以我正在评估这三个选项:

  1. 仅限使用瓶子 - 作为http服务器+应用程序
  2. 在uwsgi之上使用Bottle - 使用uwsgi作为HTTP服务器
  3. 使用nginx / uwsgi的瓶子
  4. 问题:

    • 如果我没有做除Python / uwsgi之外的任何事情,是否有任何理由将nginx添加到混音中?
    • uwsgi / bottle(或Flask)组合是否会被视为生产就绪?
    • 我是否有可能通过使用Bottle内置的单独的HTTP服务器获得任何收益?

3 个答案:

答案 0 :(得分:11)

Flask vs Bottle对我来说有几件事情。

  1. 该应用程序有多简单。如果非常简单,那么瓶子是我的选择。如果没有,那我就得到了Flask。瓶子是单个文件这一事实使得只需将文件包含在我们的源代码中就可以非常简单地进行部署。但是瓶子是单个文件的事实应该是一个非常好的迹象,表明它没有实现完整的wsgi规范及其所有边缘情况。
  2. 该应用程序做了什么。如果它必须渲染除了Python-> JSON以外的任何东西,那么我会使用Flask来内置支持Jinja2。如果我需要进行身份验证和/或授权,那么Flask已经有一些非常好的扩展来处理这些要求。如果我需要进行缓存,Flask-Cache仍然存在,并且在最小化设置的情况下做得非常好。我不完全确定什么可用于瓶子延伸,所以这仍然值得一看。
  3. 使用内置服务器的问题在于它将是单进程/单线程,这意味着您一次只能处理一个请求。

    要处理该限制,您可以按照特定顺序执行以下任何操作。

    1. Eventlet的wsgi包装bottle.app(单线程,非阻塞I / O,单个进程)
    2. uwsgi或gunicorn(后者更简单),其中大多数设置为单线程,多进程(工作者)
    3. nginx在uwsgi面前。
    4. 如果您想要提供静态资产,那么

      3是最重要的,因为您可以直接为nginx提供服务 2很容易上手(尤其是gunicorn) - 虽然我大多数时候都使用uwsgi,因为它有更多的可配置性来处理我想要的东西。
      1非常简单并且运行良好......而且没有外部配置或命令行标记要记住。

答案 1 :(得分:7)

2017更新 - 我们现在使用Falcon代替Bottle

我仍然喜欢Bottle,但我们去年达到了一个点,它无法扩展以满足我们的性能要求(100k请求/秒<100ms)。特别是,我们遇到了瓶子使用线程本地存储的性能瓶颈。这迫使我们切换到Falcon,自那以后我们就没有回头了。更好的性能和精心设计的API。

我喜欢Bottle但我也强烈推荐 Falcon ,特别是在性能很重要的地方。


我在一年前面临类似的选择 - 需要为我正在构建的服务器层进行网络微框架。发现这些幻灯片(以及随附的演讲)对于筛选选择领域非常有帮助:Web micro-framework BATTLE!

我选择了瓶子并且非常满意。它简单,轻巧(如果你在Raspberry Pis上部署,还有一个优点),易于使用,直观,具有我需要的功能,并且每当我需要添加自己的功能时,它都是极其可扩展的。 Many plugins可用。

除了dev。

之外,不要使用Bottle的内置HTTP服务器

我在制作中运行了瓶子并取得了很大的成功;它在Apache / mod_wsgi上非常稳定。 nginx / uwsgi“应该”的工作方式类似,但我没有经验。

答案 2 :(得分:2)

我还建议您通过gevent.pywsgi服务器查看运行瓶子。它非常棒,设置非常简单,异步且速度非常快。

Plus瓶已经为它构建了一个适配器,所以更容易。

我喜欢瓶子,而这个不适合大型项目的概念是荒谬的。它是最有效和编写良好的框架之一,并且可以轻松地模制而不需要大量的手工拧紧。