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

Python长驻定时脚本间歇性HTTP连接错误(imaplib、gspread场景)求助

报错含义

你遇到的getaddrinfo failed报错本质是DNS解析失败,程序运行时无法将sheets.googleapis.com域名解析为对应的IP地址,最终导致请求Google Sheets API超过最大重试次数触发连接异常。该报错和你猜测的IMAP会话未关闭没有直接关系,是Google API请求环节的网络波动类问题,本身就属于间歇性出现的故障,和网络稳定性、DNS服务的临时异常都有关。

规避方案

1. 主动释放各类会话资源

不管是IMAP连接还是gspread的客户端会话,每次循环执行完业务逻辑后都主动关闭,避免长期挂起的无效连接占用资源,也避免服务端主动断开连接后本地会话残留导致的后续请求异常:

  • 邮件读取完成后调用mail.close()和mail.logout()关闭IMAP连接
  • 每次执行写入Google Sheets的逻辑前重新调用google_auth()生成新的客户端,不要复用几小时前生成的旧客户端实例,避免授权过期或会话失效问题

示例修改后的代码片段:

# 邮件读取逻辑修改
def get_unseen_mails():
    mail = imaplib.IMAP4_SSL('outlook.office365.com', 993)
    mail.login(username, password)
    mail.list()
    mail.select('Inbox')
    result, data = mail.uid('search', None, "UNSEEN") 
    i = len(data[0].split())
    # 你的邮件处理逻辑写在这里
    # 处理完成后主动关闭连接
    mail.close()
    mail.logout()
    return 处理后的邮件数据
# Google Sheets操作逻辑修改
# 不要全局复用client,每次需要操作时重新生成
def write_to_sheets(数据):
    client = google_auth()
    worksheet = get_worksheet(client)
    # 你的写入逻辑写在这里
    # 操作完成后关闭会话
    client.session.close()

2. 增加异常捕获和重试机制

因为网络波动属于不可避免的外部问题,你可以针对连接类异常增加重试逻辑,失败后等待一段时间再重新发起请求,避免单次请求失败就导致整个程序崩溃:

import time
import socket
from requests.exceptions import ConnectionError

# 重试装饰器示例,失败最多重试3次,每次间隔10秒
def retry_request(max_retries=3, delay=10):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for i in range(max_retries):
                try:
                    return func(*args, **kwargs)
                except (ConnectionError, socket.gaierror) as e:
                    if i == max_retries -1:
                        raise e
                    time.sleep(delay)
        return wrapper
    return decorator

# 给Google Sheets操作函数加上装饰器
@retry_request()
def get_worksheet(client):
    return client.open(WORKSHEET_NAME).worksheets()

3. 可选优化:修改本地DNS配置

如果频繁出现DNS解析失败,可以将本机的DNS服务器修改为公共DNS,减少DNS服务临时故障的影响。

内容的提问来源于stack exchange,提问作者Simeon Gellert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:15:02