我在Django中使用了两个不同的python oauth库来验证twitter。安装程序在带有WSGI的apache上。当我重新启动服务器时,一切正常工作大约10分钟,然后httplib似乎锁定(请参阅以下错误)。
我只运行一个进程和一个WSGI线程,但这似乎没有什么区别。
我不明白为什么它会被锁起来,并给出这个CannotSendRequest错误。我花了很多时间在这个令人沮丧的问题上。如果您能给我一些提示/建议,我将不胜感激。
File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py", line 92, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "mypath/auth/decorators.py", line 9, in decorated
return f(*args, **kwargs)
File "mypath/auth/views.py", line 30, in login
token = get_unauthorized_token()
File "/root/storm/eye/auth/utils.py", line 49, in get_unauthorized_token
return oauth.OAuthToken.from_string(oauth_response(req))
File "mypath/auth/utils.py", line 41, in oauth_response
connection().request(req.http_method, req.to_url())
File "/usr/lib/python2.5/httplib.py", line 866, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python2.5/httplib.py", line 883, in _send_request
self.putrequest(method, url, **skips)
File "/usr/lib/python2.5/httplib.py", line 770, in putrequest
raise CannotSendRequest()
无法发送请求
还要检查Python版本。在从Py-2.6升级到Py-2.7之后,我遇到了类似的情况。在Py-2.6中,一切工作正常,没有任何问题。Py-2.7httplib默认使用HTTP/1.1,这使得服务器没有发送回响应中的Connection:close选项,因此连接处理被中断。不过,在我的例子中,这在HTTP/1.0中是有效的。
当您对新请求重用
httplib.HTTP
对象时,如果您没有对前一个请求调用其getresponse()
方法,则会引发此异常。可能在这个错误之前还有其他一些错误导致连接处于断开状态。解决这个问题最简单可靠的方法是为每个请求创建新的连接,而不是重用它。当然,速度会慢一点,但我认为在单进程和单线程中运行应用程序并不是问题。相关问题 更多 >
编程相关推荐