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

发布于 2024-10-18 15:07:18 字数 426 浏览 7 评论 0原文

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

I have an existing cherrypy application but I want to know is if it's at all possible to run it on the gevent wsgi server. I imagine I can but I don't have access to a linux server to test out gevent and haven't been able to get it to run on my mac.

I'm under the impression this is possible since each side follows wsgi spec.

Has anyone tried this?

I guess an example would look like the following:

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()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧时光的容颜 2024-10-25 15:07:18

这个例子将一直有效,直到您在cherrypy处理程序中遇到greenlet switch!因此,如果您在处理程序内使用 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 切换到下一个处理,它将覆盖全局对象中的内容长度标头,您将面临奇怪的错误客户端。

This example will work until you encounter greenlet switch inside cherrypy handlers ! So this will fail if you use gevent for asynchronous communication inside handlers.

cherrypy uses global object for storing response and headers inside found inside 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')

If you pause one request and gevent switches to processing next it will overwrite content-length header in global object and you will face strange errors on client side.

寒冷纷飞旳雪 2024-10-25 15:07:18

那个例子效果很好。我确信 freenode 上的 #gevent 会帮助您解决任何安装问题。

That example works fine. I'm sure #gevent on freenode would help you with any installation issues.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文