讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Python中实现断网自动重连并继续执行下载任务?

酷辰小哥_5657

酷辰小哥_5657

发布时间:2026-10-26 09:45:51

|

508人浏览过

|

来源于php中文网

原创

应使用Retry策略配合HTTPAdapter实现可控重试,支持断点续传(Range请求)、双地址探测真实断网、threading.Event控制生命周期,并定期重建Session以应对配置变更。

如何在python中实现断网自动重连并继续执行下载任务?

用 requests + 重试机制处理网络中断

直接靠单次 requests.get() 肯定不行,断网时会抛出 requests.exceptions.ConnectionError 或 requests.exceptions.Timeout。必须包裹重试逻辑,且不能无脑循环——得控制次数、间隔和退出条件。

推荐用 urllib3.util.retry.Retry 配合 requests.adapters.HTTPAdapter,它比手写 while True 更可靠,能区分可重试与不可重试错误(比如 404 不该重试,但连接拒绝可以)。

  • 设置 total=5 控制总重试次数,backoff_factor=1 启用指数退避(第1次等1秒,第2次等2秒,第3次等4秒…)
  • 显式指定 allowed_methods=["HEAD", "GET", "OPTIONS"],避免 POST 等非幂等请求被误重试
  • 务必捕获最终失败:即使重试耗尽,仍要抛出异常或返回 None,否则任务会静默卡死
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
import requests

session = requests.Session()
retry_strategy = Retry(
    total=5,
    backoff_factor=1,
    allowed_methods=["HEAD", "GET", "OPTIONS"],
    status_forcelist=[429, 500, 502, 503, 504],
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)

try:
    resp = session.get("https://example.com/large-file.zip", timeout=(3.05, 27))
except requests.exceptions.RequestException as e:
    print(f"下载彻底失败:{e}")

大文件下载中断后续传(Range 请求)

单纯重试整个下载,在网络不稳定+大文件场景下极低效。必须支持断点续传,核心是利用 HTTP Range 头和服务器返回的 Accept-Ranges: bytes 响应头。

关键不是“能不能续”,而是“怎么安全判断该从哪续”。不能只依赖本地文件大小——可能写入一半崩溃导致末尾数据损坏。

立即学习“Python免费学习笔记(深入)”;

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
  • 先用 HEAD 请求获取文件总大小(Content-Length),再对比本地已存大小
  • 若本地文件存在且大小 > 0,用 Range: bytes={start}- 发起带范围的 GET,并检查响应状态码是否为 206 Partial Content
  • 用二进制追加模式("ab")写入,避免覆盖已有内容;写入前建议校验最后几个字节(如魔数)确认完整性

检测真实断网而非临时超时

重连逻辑容易把短暂高延迟误判为断网,频繁重试反而加重网络负担。需要更精准的连通性判断。

不要只依赖目标域名的请求失败——可能是服务端问题。应额外探测一个稳定兜底地址(如 https://cloudflare-dns.com/dns-query 或 http://1.1.1.1),用极短超时(timeout=(0.5, 0.5))快速验证本机网络栈是否存活。

  • 若目标地址失败但兜底地址成功 → 服务端问题,不应重连,应降级或告警
  • 若两者均失败 → 真实断网,启动重连流程(可配合 os.system("ping -c1 1.1.1.1") 做二次确认)
  • 避免在循环重试中每次都调用系统命令,应设最小探测间隔(如 5 秒)

用 threading.Event 或信号控制重连生命周期

自动重连不能变成永动机。用户主动取消、程序退出、磁盘满、认证过期等情况,都必须能及时终止重试。

硬编码 time.sleep() 和 while 循环很难响应外部中断。推荐用 threading.Event 作为全局开关,或监听 SIGINT/SIGTERM。

  • 将重试逻辑封装进函数,每次循环开头检查 stop_event.is_set()
  • 主流程中调用 stop_event.set() 即可立即退出所有重试线程
  • 对长任务,每完成一个 chunk 下载就检查一次事件状态,避免卡在阻塞 I/O 中无法退出

最易被忽略的是:重连过程中若发生证书变更、代理配置更新、DNS 缓存过期,旧 session 可能持续失败。需要设计 session 重建触发点,而不是复用同一个 requests.Session() 对象到底。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1811

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4784

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1769

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

28497

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3427

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3427

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1223

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

616

2023.08.10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn