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