我正在使用bottlepy
框架开发一个应用程序。我正在使用标准库WSGIRefServer()
来运行开发服务器。它是一个单线程服务器。
现在投入生产时,我想转移到多线程生产服务器,有很多选择。假设我选择了CherryPy。
现在,在我的代码中,我正在初始化一个wsgi
应用程序。除此之外,我还在初始化其他事情......
由于标准库wsgiref
是单线程服务器,并且我只创建了一个wsgi应用程序(wsgi可调用),所以一切正常。
我想知道的是,当我转移到多线程服务器时,我的wsgi应用程序,初始化代码,与不同服务器的连接等行为如何。
多线程服务器是否会为每个线程创建一个单独的wsgi app实例。并且会为每个新请求生成一个新线程(这意味着每个请求都有一个新的wsgi应用程序)?
我是否可以跨线程共享与memcached,mongoDB等的连接。线程之间还将分享什么
请解释线程服务器的请求 - 响应周期
答案 0 :(得分:1)
通常,您的应用程序使用符合wsgi的框架,您不应该害怕多线程/单线程服务器端。这意味着工作透明,并且必须采取相同的方式,尽管它是什么类型的服务器,只要它符合wsgi。
bottle.run()
之前的每个代码块只会运行一次。因此,每个连接(数据库,memcached)只会被实例化一次并共享。
当您致电bottle.run()
时,bothpy启动wsgi服务器。对该服务器的每个请求都会在bottlepy框架内触发一些可调用的wsgi。如果是单线程或多线程环境,只要你不做一些奇怪的事情,你就不会真正感兴趣。
对于奇怪,我的意思是例如通过全局变量同步某些东西。 (这里的例外是全局request
对象,对于该对象,bottlepy确保它在适当的上下文中包含正确的请求。)
回应列表中的第一个问题:请求可以在线程池中新生成的线程或线程中计算(CherryPy是线程池)