oauth library(从Justin.tv Python library page链接)在随机时间无限期地锁定我的Python进程。这是随机发生的,但我的一台服务器上的 OFTEN 。我很肯定这不是由于我的代码中的任何内容,所以我粘贴了与Justin.tv python库和oauth相关的堆栈转储部分:
File "/home/honstreams/honstreams/website/JtvClient.py", line 51, in get return self._send_request(request, token) File "/home/honstreams/honstreams/website/JtvClient.py", line 90, in _send_request return conn.getresponse() File "/usr/lib/python2.6/httplib.py", line 986, in getresponse response.begin() File "/usr/lib/python2.6/httplib.py", line 391, in begin version, status, reason = self._read_status() File "/usr/lib/python2.6/httplib.py", line 349, in _read_status line = self.fp.readline() File "/usr/lib/python2.6/socket.py", line 397, in readline data = 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-Ubuntu SMP Fri Apr 8 20:00:13 UTC 2011 i686 GNU/Linux
答案 0 :(得分:2)
Justin.tv Python Client Library中的这些行是相关的:
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
未通过任何超时。将该代码更改为超时,并确保定义发生超时时发生的情况。