WSlI中的httplib CannotSendRequest错误

Dav*_*ave 16 python twitter wsgi oauth httplib

我和Django使用了两个不同的python oauth库来通过twitter进行身份验证.使用WSGI进行apache设置.当我重新启动服务器时,一切都运行良好大约10分钟,然后httplib似乎锁定(请参阅以下错误).

我只运行了1个进程和1个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()
Run Code Online (Sandbox Code Playgroud)

CannotSendRequest

Den*_*ach 29

当您httplib.HTTP为新请求重用对象时,如果您没有getresponse()为先前的请求调用其方法,则会引发此异常.可能在此之前还有一些其他错误导致连接处于断开状态.解决问题的最简单可靠方法是为每个请求创建新连接,而不是重用它.当然,它会慢一点,但我认为让你在单进程和单线程中运行应用程序不是问题.

  • @Dave因为我的twitter auth库遇到了同样的问题,你能分享一下你所做的改变吗? (3认同)