python - libreria - Error de httplib CannotSendRequest en WSGI
twitter platform (2)
He usado dos bibliotecas Othon de python diferentes con Django para autenticarme con Twitter. La configuración está en apache con WSGI. Cuando reinicio el servidor todo funciona bien durante unos 10 minutos y luego parece que el httplib se bloquea (vea el siguiente error).
Estoy ejecutando solo 1 proceso y 1 hilo de WSGI, pero parece que no importa.
No puedo entender por qué se está bloqueando y dando este error CannotSendRequest. He pasado muchas horas en este frustrante problema. Cualquier sugerencia / sugerencias de lo que podría ser sería muy apreciada.
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
Esta excepción se plantea cuando reutiliza el objeto httplib.HTTP
para una nueva solicitud, mientras que no ha llamado a su método getresponse()
para una solicitud previa. Probablemente hubo otro error antes de este que dejó la conexión en estado roto. La forma más sencilla y confiable de solucionar el problema es crear una nueva conexión para cada solicitud, sin reutilizarla. Claro, será un poco más lento, pero creo que no es un problema tener que ejecutar la aplicación en un solo proceso y un solo hilo.
También verifica tu versión de Python. Tuve una situación similar después de actualizar a Py-2.7 desde Py-2.6. En Py-2.6 todo funcionó sin problemas. Py-2.7 httplib usa HTTP / 1.1 de forma predeterminada lo que hizo que el servidor no devolviera la conexión: opción de cerrar en la respuesta, por lo tanto, el manejo de la conexión se interrumpió. En mi caso, esto funcionó con HTTP / 1.0.