gevent.WSGIServer请求方法之谜

时间:2012-01-22 15:24:45

标签: python gevent http-method

运行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

1 个答案:

答案 0 :(得分:1)

Libevent对HTTP方法的支持有限,支持哪些HTTP方法取决于libevent版本。为什么你有一个数字而不是一个方法显然是一个错误。难道你正在构建和链接gevent与不同的版本?

您可以尝试切换到gevent.pywsgi吗?这将以某些性能为代价来解决问题。

此外,1.0版本的gevent还有许多重大改进。你可以在那里得到它:http://code.google.com/p/gevent/downloads/list