什么部分python.socket即使设置了超时,也可以永远冻结我的脚本?

2024-06-09 00:32:14 发布

您现在位置:Python中文网/ 问答频道 /正文

oauth library(从Justin.tv Python library page链接)随机地无限期地锁定我的Python进程。这是随机发生的,但通常在我的一台服务器上。我肯定这不是由于我的代码中的任何原因,所以我粘贴了与贾斯汀电视台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即使设置了超时(有时超时)也可以锁定,以及任何可以防止的方法。


这里有更多的信息

^{pr2}$

Tags: inpyselfhomerequestlibusrstatus
1条回答
网友
1楼 · 发布于 2024-06-09 00:32:14

来自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!

请注意,^{}而不是超过了任何超时。将该代码更改为超时,并确保定义超时发生时发生的情况。

相关问题 更多 >