1

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

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

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

  • Memcached 连接
  • 鲭鱼模板
  • MongoDB 连接

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

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

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

  • 我与 memcached、mongoDB 等的连接是否会跨线程共享。线程之间还会共享什么

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

4

1 回答 1

1

一般来说,您的应用程序使用的是 wsgi 兼容的框架,您不应该害怕多线程/单线程服务器端。它的目的是透明地工作,并且无论它是哪种服务器,只要它符合 wsgi 标准,它就必须以相同的方式做出反应。

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

当你调用bottle.run()bottlepy 时会为你启动wsgi 服务器。对该服务器的每个请求都会在 Bottlepy 框架内触发一些可调用的 wsgi。你对它是单线程还是多线程环境并不感兴趣,只要你不做一些奇怪的事情。

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

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

于 2012-06-08T14:28:15.847 回答