You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:28:12