5

我有一个现有的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()
4

2 回答 2

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 切换到下一个处理,它将覆盖全局对象中的 content-length 标头,您将在客户端遇到奇怪的错误。

于 2012-06-06T15:18:19.680 回答
2

该示例工作正常。我确信freenode 上的#gevent 会帮助您解决任何安装问题。

于 2011-02-28T21:32:24.697 回答