2011-02-22 12 views
5

私は既存のcherrypyアプリケーションを持っていますが、gevent wsgiサーバー上で実行することが可能かどうかを知りたいと思っています。私はできますが、私はgeventをテストするためにLinuxサーバにアクセスする必要はありませんが、私のMac上で実行することができていないと思う。gevent wsgiサーバーでcherrypyアプリケーションを実行しています

これは、各サイドが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

た例が正常に動作します:

は私が例では、次のようになりますね。私は、faintodeの#geventがインストールに関する問題にあなたを助けるだろうと確信しています。

+0

はい、私はチェリーツリーとアプリケーションオブジェクトに_callable_が含まれていることを確認しました。すべて期待どおりに動作するはずです...リモートテストプラットフォームでもfreenodeをチェックします。乾杯! – deecodameeko

3

この例は、チェリーピーハンドラーの中でグリーンレットスイッチに遭遇するまで機能します!したがって、ハンドラー内で非同期通信にgeventを使用すると、これは失敗します。

# 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スイッチを一時停止した場合、コンテンツの長さ:CherryPyに/ __ init__.py:~350の中に発見内

CherryPyにはレスポンスとヘッダを格納するためのグローバルオブジェクトを使用していますヘッダーをグローバルオブジェクトに入れ、クライアント側で奇妙なエラーに直面します。

+0

確かに。誰かがgreenletsを使用したい場合は、スレッドローカル "サービング"オブジェクトをgreenletローカルのものに置き換える必要があります。 – fumanchu

関連する問題