Python3.6下Tweepy流运行超24小时出现OpenSSL.SSL.WantReadError报错求助
解决Tweepy流运行超24小时后SSL连接报错的问题
嘿,我之前维护Tweepy流服务的时候也碰到过一模一样的问题!长时间运行后出现SSL相关的报错,本质上是Twitter的Streaming API不会保持永久连接,通常24小时左右就会主动断开,再加上网络波动、SSL会话过期这些因素,就会触发你看到的报错。下面给你几个实用的解决办法:
1. 给Stream添加自动重连机制
Tweepy的StreamListener本身支持通过on_error方法处理错误,再配合递归重启的逻辑,就能在断开后自动恢复:
import time from tweepy import Stream, OAuthHandler from tweepy.streaming import StreamListener class PersistentListener(StreamListener): def on_error(self, status_code): print(f"收到错误码: {status_code}") # 420是速率限制,此时应该暂时停止并重连 if status_code == 420: time.sleep(120) # 等2分钟再试 return False # 其他错误(比如SSL断开)允许继续监听 return True def start_twitter_stream(): # 替换成你的认证信息 consumer_key = "YOUR_KEY" consumer_secret = "YOUR_SECRET" access_token = "YOUR_TOKEN" access_token_secret = "YOUR_TOKEN_SECRET" auth = OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) listener = PersistentListener() stream = Stream(auth, listener, stall_warnings=True) try: # 替换成你要跟踪的关键词或规则 stream.filter(track=["python", "tweepy"]) except Exception as e: print(f"流连接断开,错误详情: {str(e)}") time.sleep(60) # 等待1分钟后重启 start_twitter_stream() if __name__ == "__main__": start_twitter_stream()
2. 配置带重试的HTTP Session
报错来自urllib3和pyopenssl,说明底层HTTP连接的重试策略不够完善。我们可以给Tweepy传入一个配置了重试机制的requests Session,让它自动处理连接超时和SSL异常:
import requests from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry from tweepy import Stream, OAuthHandler from tweepy.streaming import StreamListener # 创建支持重试的Session session = requests.Session() # 配置重试规则:最多重试5次,针对常见的服务器错误和速率限制 retry_strategy = Retry( total=5, backoff_factor=1, # 重试间隔指数增长:1s, 2s, 4s... status_forcelist=[429, 500, 502, 503, 504], allowed_methods=["GET", "POST"] ) adapter = HTTPAdapter(max_retries=retry_strategy) session.mount("https://", adapter) # 后续创建Stream时传入这个session stream = Stream(auth, listener, session=session)
3. 升级依赖库(重要!)
你用的Python3.6已经停止维护了,而且旧版本的tweepy、requests、pyopenssl可能存在已知的SSL连接bug。建议升级这些依赖:
pip install --upgrade tweepy requests urllib3 pyopenssl
如果条件允许,最好把Python版本升级到3.8及以上,不仅更安全,也能更好地兼容新版本的Tweepy。
内容的提问来源于stack exchange,提问作者TmSmth
相关产品推荐
相关产品推荐

