2012-06-08 164 views
1

我正在开发一个应用程序与bottlepy框架。我正在使用标准库WSGIRefServer()来运行开发服务器。它是一个单线程服务器。Python:从开发服务器移动到生产服务器

现在,当进入生产阶段时,我会转向一个多线程生产服务器,并且有很多选择。假设我选择CherryPy。

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

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

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

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

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

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

  • 请解释请求 - 响应周期的螺纹服务器

回答

1

在一般应用程序正在使用WSGI兼容的框架,你不应该害怕多线程的/单线程服务器端。它意味着透明,并且必须以同样的方式做出反应,尽管它是什么类型的服务器,只要它符合wsgi。

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

当你打电话给bottle.run()瓶颈启动wsgi服务器为你。对该服务器的每个请求都会引发一些wsgi可调用的内部框架。如果它是单线程或多线程的环境,只要你不做一些奇怪的事情,你并不感兴趣。

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

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

相关问题