1

gevent の WSGIServer を実行すると、非常に奇妙な動作が発生します。通過するすべてのリクエストが、そのメソッドを正しく解釈していないようです..

次のリクエストを送信した場合:

requests.get('http://localhost:5000')
requests.head('http://localhost:5000')
requests.delete('http://localhost:5000')
requests.put('http://localhost:5000')
requests.post('http://localhost:5000')

これはコンソールに表示されるものです:

127.0.0.1 - - [2012-01-22 14:55:36] "POST / HTTP/1.1" 405 183 "-" "python-requests/0.9.1"
127.0.0.1 - - [2012-01-22 14:55:41] "DELETE / HTTP/1.1" 405 185 "-" "python-requests/0.9.1"
127.0.0.1 - - [2012-01-22 14:55:46] "16 / HTTP/1.1" 405 181 "-" "python-requests/0.9.1"
127.0.0.1 - - [2012-01-22 14:55:50] "8 / HTTP/1.1" 405 180 "-" "python-requests/0.9.1"
127.0.0.1 - - [2012-01-22 14:56:13] "HEAD / HTTP/1.1" 200 0 "-" "python-requests/0.9.1"

完全を期すために、これは私が実行しているスクリプトです。

from gevent.wsgi import WSGIServer
from flask import Flask

app = Flask(__name__)
app.debug = True

@app.route("/")
def hello():
    return 'hello'

port = 5000

http_server = WSGIServer(('', port), app)
http_server.serve_forever()

何が起こっているのでしょうか?

編集:

私はgeventバージョンを使用しています:0.13.0

4

1 に答える 1

1

LibeventはHTTPメソッドのサポートが制限されており、サポートされるHTTPメソッドはlibeventのバージョンによって異なります。メソッドの代わりに数値を使用する理由は明らかにバグです。異なるバージョンに対してgeventを構築し、リンクしている可能性がありますか?

gevent.pywsgiに切り替えてみてください。これにより、パフォーマンスがいくらか犠牲になりますが、問題は修正されます。

また、geventの1.0バージョンには、多くの大きな改善があります。あなたはそこにそれを得ることができます:http ://code.google.com/p/gevent/downloads/list

于 2012-01-22T18:07:22.647 に答える