Skip to content

✨ m2w v2.7.0 - Rate Limiting & Resumable Uploads

Choose a tag to compare

@huangwb8 huangwb8 released this 24 Jan 15:22
· 6 commits to main since this release

🎉 m2w v2.7.0 - 批量上传的安全解决方案

为解决批量上传大量文章(1000+ 篇)时可能触发的服务器限流问题,本版本引入了速率限制批次处理断点续传三大核心功能,让批量上传更加安全可靠!


🚀 核心亮点

  • 🛡️ 速率限制保护 — 可配置的请求间延迟,有效避免 HTTP 429 错误和 IP 封禁
  • 📦 批次处理机制 — 将大量文章分批处理,批次间自动暂停,降低服务器压力
  • ⏮️ 断点续传支持 — 进度实时保存,中断后可从断点继续,无需重新开始
  • 🔄 智能重试机制 — 遇到 HTTP 429 错误时自动指数退避重试

✨ 主要更新

速率限制器 (RateLimiter)

新增 m2w/rest_api/rate_limiter.py 模块,提供以下功能:

  • 请求间延迟:每个请求之间可配置延迟时间(默认 1.0 秒)
  • 批次处理:按批次大小处理文件(默认每批 10 篇)
  • 批次间延迟:批次之间可配置更长延迟(默认 5.0 秒)
  • HTTP 429 处理:检测到速率限制时自动指数退避重试

进度管理器 (ProgressManager)

新增 m2w/rest_api/progress_manager.py 模块,支持断点续传:

  • 进度保存:实时保存上传进度到 .m2w_progress.json
  • 断点恢复:中断后重新运行可从上次断点继续
  • 失败记录:记录失败文件及错误信息,方便排查
  • 自动清理:全部完成后自动清除进度文件

新增配置参数

myblog.py 中可配置以下参数:

# 速率限制配置
rate_limit_enabled = True      # 启用速率限制
request_delay = 1.0            # 请求间延迟(秒)
batch_size = 10                # 每批处理的文章数
batch_delay = 5.0              # 批次间延迟(秒)
max_429_retries = 5            # 429 最大重试次数
initial_backoff = 2.0          # 指数退避初始时间(秒)

# 进度保存配置
progress_enabled = True        # 启用断点续传
progress_file = None           # None 表示与 legacy.json 同目录

🔧 技术改进

  • 重构 upload_article() 方法,支持分批处理逻辑
  • 新增 _upload_with_retry() 方法,处理 HTTP 429 错误重试
  • 修复 Path 类型与字符串拼接的兼容性问题
  • 更新 README 文档,添加 v2.7.0 功能说明

📋 推荐配置

保守配置(严格限制的服务器):

request_delay = 2.0
batch_size = 5
batch_delay = 10.0

平衡配置(推荐):

request_delay = 1.0
batch_size = 10
batch_delay = 5.0

激进配置(宽松限制的服务器):

request_delay = 0.5
batch_size = 20
batch_delay = 3.0

📦 安装

pip install -i https://pypi.org/simple m2w==2.7.0

或从源码构建:

python -m build
pip install dist/m2w-2.7.0*.whl

📝 完整变更日志

  • ✨ feat(up): add rate limiting and resumable uploads for bulk operations
  • 📄 更新 README 文档,添加 v2.7.0 新功能说明
  • 🔧 修复 pyproject.toml 版本号

适用场景:批量上传 1000+ 篇文章、服务器限流严格、需要可中断恢复的上传任务

🙏 感谢使用 m2w!