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

1 つのリクエストを一時停止し、gevent が次の処理に切り替わると、グローバル オブジェクトの content-length ヘッダーが上書きされ、クライアント側で奇妙なエラーが発生します。

于 2012-06-06T15:18:19.680 に答える
2

その例はうまくいきます。freenode の #gevent が、インストールに関する問題の解決に役立つと確信しています。

于 2011-02-28T21:32:24.697 に答える