16

Twitterで認証するために、Djangoで2つの異なるpython oauthライブラリを使用しました。セットアップは、WSGI を使用した apache 上にあります。サーバーを再起動すると、すべてが約 10 分間正常に動作し、その後 httplib がロックされたように見えます (次のエラーを参照)。

WSGI の 1 つのプロセスと 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()

リクエストを送信できません

4

2 に答える 2

30

この例外は、以前のリクエストでメソッドをhttplib.HTTP呼び出していないときに、新しいリクエストでオブジェクトを再利用すると発生します。getresponse()おそらく、このエラーの前に、接続が切断された状態のままになる他のエラーが発生した可能性があります。問題を解決するための最も簡単で確実な方法は、リクエストごとに新しい接続を作成することであり、再利用することではありません。確かに、少し遅くなりますが、アプリケーションをシングル プロセスおよびシングル スレッドで実行していれば問題ないと思います。

于 2009-12-18T10:00:26.590 に答える