在gevent wsgi服务器上运行cherrypy应用程序

时间:2011-02-22 02:44:41

标签: cherrypy gevent

我有一个现有的cherrypy应用程序,但我想知道是否可以在gevent wsgi服务器上运行它。我想我可以但我没有访问linux服务器来测试gevent并且无法让它在我的mac上运行。

我认为这是可能的,因为每一方都遵循wsgi规范。

有没有人试过这个?

我想一个例子如下所示:

import cherrypy 
from gevent import wsgi

class Root(object):
     def index(self):
        return "hi!"
     index.exposed = True

app = cherrypy.tree.mount(Root(), '/')
wsgi.WSGIServer(('', 8088), app).serve_forever()

2 个答案:

答案 0 :(得分:3)

此示例将一直有效,直到您在cherrypy处理程序中遇到greenlet切换!因此,如果您使用gevent进行处理程序内的异步通信,则会失败。

cherrypy使用全局对象存储在cherrypy / __ init__.py:~350中找到的响应和标题:

# Create request and response object (the same objects will be used
#   throughout the entire life of the webserver, but will redirect
#   to the "serving" object)
request = _ThreadLocalProxy('request')
response = _ThreadLocalProxy('response')

如果您暂停一个请求并将gevent切换到下一个处理,它将覆盖全局对象中的内容长度标头,您将在客户端遇到奇怪的错误。

答案 1 :(得分:2)

这个例子很好用。我确信freenode上的#gevent可以帮助您解决任何安装问题。