我使用两个不同的python oauth库和Django来通过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()
CannotSendRequest
答案 0 :(得分:28)
当您为新请求重用httplib.HTTP
对象时,如果您没有为先前的请求调用其getresponse()
方法,则会引发此异常。可能在此之前还有一些其他错误导致连接处于断开状态。解决问题的最简单可靠方法是为每个请求创建新连接,而不是重用它。当然,它会慢一点,但我认为让你在单进程和单线程中运行应用程序不是问题。