加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在ssl do_handshake()上挂着的Tweepy 2.0

发布时间:2020-12-20 13:34:11 所属栏目:Python 来源:网络整理
导读:我有一个长期运行的Twitter抓取脚本,偶尔挂起堆栈跟踪结束 "/usr/lib/python2.7/ssl.py",line 305: self._sslobj.do_handshake() 我的问题是“为什么?”和“我能做些什么来解决它?”. 在发生这种情况之前,通常会持续一周左右.最后一次,处理tweepy挂起的4个
我有一个长期运行的Twitter抓取脚本,偶尔挂起堆栈跟踪结束

"/usr/lib/python2.7/ssl.py",line 305: self._sslobj.do_handshake()

我的问题是“为什么?”和“我能做些什么来解决它?”.

在发生这种情况之前,通常会持续一周左右.最后一次,处理tweepy挂起的4个线程中有3个挂起(第四个是等待来自挂起线程的信息).奇怪的是,线程挂起之间有相当长的延迟:首先,调用api.followers_ids()的线程挂起,然后大约12分钟后调用api.friends_ids()的线程挂起,然后1小时12分钟后(!)线程调用api.search()挂起.在所有这些之间有许多api调用.

当我发送QUIT信号时,我在那里有一些代码来转储它的堆栈跟踪,并且我为挂起的线程获得了类似的内容.它们都是(和包括)第二个条目(tweepy / binder.py,第185行,_call部分)相同.另外两个来自tweepy / cursor.py,接下来的第85行和下一行的tweepy / cursor.py,第60行:

File "myTwitterScrapingScript.py",line 245,in checkStatus
    status = api.rate_limit_status()
  File "/scratch/bin/python-virtual-environments/tweepy-2/local/lib/python2.7/site-packages/tweepy/binder.py",line 185,in _call
    return method.execute()
  File "/scratch/bin/python-virtual-environments/tweepy-2/local/lib/python2.7/site-packages/tweepy/binder.py",line 146,in execute
    conn.request(self.method,url,headers=self.headers,body=self.post_data)
  File "/usr/lib/python2.7/httplib.py",line 958,in request
    self._send_request(method,body,headers)
  File "/usr/lib/python2.7/httplib.py",line 992,in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py",line 954,in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py",line 814,in _send_output
    self.send(msg)  File "/scratch/bin/python-virtual-environments/tweepy-2/local/lib/python2.7/site-packages/tweepy/binder.py",in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py",line 776,in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py",line 1161,in connect
    self.sock = ssl.wrap_socket(sock,self.key_file,self.cert_file)
  File "/usr/lib/python2.7/ssl.py",line 381,in wrap_socket
    ciphers=ciphers)
  File "/usr/lib/python2.7/ssl.py",line 143,in __init__
    self.do_handshake()
  File "/usr/lib/python2.7/ssl.py",line 305,in do_handshake
    self._sslobj.do_handshake()

线程挂起的时候有几个错误.这不是太不寻常,虽然这个数字略高于正常水平.第四个看起来很有趣但它发生在线程挂起之前.

> [Errno 110]:在最后一次followers_ids()调用之前,连接超时约7分钟(中间有许多各种api调用)
> [Errno 104]大约3分钟后由同行重置连接(再次,几次成功通话)
> [Errno 110]连接在最后一次friends_ids()调用前大约1.5分钟超时.这是在api.search()线程中,它在第一个threaad挂起前大约5分钟一直在等待 – 总共等待大约15分钟.
> [Errno 104]在来自friends_ids()线程的最后一条消息之前大约2毫秒的连接重置连接,并且在同一个线程中.刚刚收集的朋友ID的页面显示一切正常,并且这些调用没有错误.
> [Errno 104]在expert_ids线程挂起约17分钟后,搜索线程挂起前一小时,搜索线程中的对等点重置连接.
> A无法在1.5分钟后发送请求TweepError.
> 3更多理由无法在接下来的45分钟内发送请求和[Errno 104]连接重置.
>在搜索线程最终挂起之前,大约有15个无错误的分钟,包含大量搜索和lookup_users调用.

解决方法

这个问题似乎与tweepy没有实现超时.在最近的tweepy版本中,这已得到修复,此问题从未发生过(连续几个月的数据收集).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读