Python:从开发服务器迁移到生产服务器

时间:2012-06-08 12:12:52

标签: python

我正在使用bottlepy框架开发一个应用程序。我正在使用标准库WSGIRefServer()来运行开发服务器。它是一个单线程服务器。

现在投入生产时,我想转移到多线程生产服务器,有很多选择。假设我选择了CherryPy。

现在,在我的代码中,我正在初始化一个wsgi应用程序。除此之外,我还在初始化其他事情......

  • Memcached连接
  • Mako模板
  • MongoDB连接

由于标准库wsgiref是单线程服务器,并且我只创建了一个wsgi应用程序(wsgi可调用),所以一切正常。

我想知道的是,当我转移到多线程服务器时,我的wsgi应用程序,初始化代码,与不同服务器的连接等行为如何。

  • 多线程服务器是否会为每个线程创建一个单独的wsgi app实例。并且会为每个新请求生成一个新线程(这意味着每个请求都有一个新的wsgi应用程序)?

  • 我是否可以跨线程共享与memcached,mongoDB等的连接。线程之间还将分享什么

  • 请解释线程服务器的请求 - 响应周期

1 个答案:

答案 0 :(得分:1)

通常,您的应用程序使用符合wsgi的框架,您不应该害怕多线程/单线程服务器端。这意味着工作透明,并且必须采取相同的方式,尽管它是什么类型的服务器,只要它符合wsgi。

bottle.run()之前的每个代码块只会运行一次。因此,每个连接(数据库,memcached)只会被实例化一次并共享。

当您致电bottle.run()时,bothpy启动wsgi服务器。对该服务器的每个请求都会在bottlepy框架内触发一些可调用的wsgi。如果是单线程或多线程环境,只要你不做一些奇怪的事情,你就不会真正感兴趣。

对于奇怪,我的意思是例如通过全局变量同步某些东西。 (这里的例外是全局request对象,对于该对象,bottlepy确保它在适当的上下文中包含正确的请求。)

回应列表中的第一个问题:请求可以在线程池中新生成的线程或线程中计算(CherryPy是线程池)