2

oauthライブラリJustin.tv Pythonライブラリページからリンクされています)は、Pythonプロセスをランダムな時間に無期限にロックします。これはランダムに発生しますが、多くの場合、私のサーバーの1つで発生します。私はこれが私のコードの何かによるものではないと確信しているので、Justin.tvpythonライブラリとoauthに関連するスタックダンプの一部を貼り付けています:

  ファイル"/home/honstreams/honstreams/website/JtvClient.py"、51行目、get
    self._send_request(request、token)を返します
  _send_requestのファイル"/home/honstreams/honstreams/website/JtvClient.py"、行90
    conn.getresponse()を返します
  getresponseのファイル"/usr/lib/python2.6/httplib.py"、行986
    response.begin()
  ファイル"/usr/lib/python2.6/httplib.py"、391行目
    バージョン、ステータス、理由= self._read_status()
  _read_statusのファイル"/usr/lib/python2.6/httplib.py"、行349
    line = self.fp.readline()
  ファイル"/usr/lib/python2.6/socket.py"、397行目、readline
    データ=recv(1)
KeyboardInterrupt

一番下の行は、の前にスタックしている場所KeyboardInterruptです。私は永遠にそのラインにとどまるか、少なくとも数日間はそれを実行させます。

socket.pyタイムアウトが設定されていても(場合によってはタイムアウトになります)、ロックアップする可能性があり、それを防ぐことができる方法に興味があります。


ここにもう少し情報があります

root @ foo:〜#python --version
Python 2.6.5
root @ foo:〜#uname -a
Linux foo.bar.no 2.6.32-31-generic-pae#61-UbuntuSMP金4月8日20:00:13UTC 2011 i686 GNU / Linux
4

1 に答える 1

2

Justin.tvPythonクライアントライブラリのこれらの行は関連しています。

def _send_request(self, request, token=None):
    request.sign_request(OAuthSignatureMethod_HMAC_SHA1(), self.consumer, token)
    conn = self._get_conn() # connection was requested here
    if request.http_method == 'POST':
        conn.request('POST', request.http_url, body=request.to_postdata())
    else:
        conn.request('GET', request.http_url, headers=request.to_header())
    return conn.getresponse()  # Error occurs here

def _get_conn(self):
    return httplib.HTTPConnection("%s:%d" % (self.host, self.port)) # no timeout!

はタイムアウトを渡されhttplib.HTTPConnectionないことに注意してください。そのコードを変更してタイムアウトを取得し、タイムアウトが発生したときに何が起こるかを必ず定義してください。

于 2011-10-14T21:40:41.493 に答える