在WSGI httplib的CannotSendRequest错误在WSGI httplib的Can

2019-05-12 02:28发布

我使用Django的两个不同的Python库的OAuth与Twitter进行身份验证。 该设置是与WSGI阿帕奇。 当我重新启动服务器,一切约10分钟的伟大工程,然后httplib的,似乎锁定(请参阅下面的错误)。

我只运行1进程和WSGI的1个线程,但似乎没有什么区别。

我想不通为什么它锁起来,给这个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

Answer 1:

当你重复使用,引发此异常httplib.HTTP新的请求对象,而你没有带叫其getresponse()对先前请求方法。 也许有这一个留在破碎的状态连接之前,其他一些错误。 解决该问题的最简单可靠的方法是创建为每个请求新的连接,而不是重新使用。 当然,这将是一个慢一点,但我认为这是没有正在运行在单个进程和单线程应用程序的问题。



Answer 2:

另外,请检查你的Python版本。 我从PY-2.6更新到PY-2.7以后出现类似情况。 在PY-2.6一切正常,没有任何问题。 PY-2.7 httplib的使用HTTP / 1.1默认情况下,这使得服务器并没有发回的连接:关闭选项的响应,因此连接控制被打破。 在我的情况下,这个曾与HTTP / 1.0虽然。



文章来源: httplib CannotSendRequest error in WSGI