可运行示例

带受控并发与重试的异步抓取器

使用 Semaphore 信号量控制并发、指数退避重试瞬时失败并隔离单项错误,实现韧性异步任务批处理。

Intermediate10–15 min自动化Python 3.12+ · Standard library only

问题

无界的 asyncio.gather 并发会导致套接字耗尽、429 限流与级联失败。生产级批处理抓取器必须限制并发、重试瞬时失败(429、503、超时)、对永久错误快速失败,并保证单条失败不会拖垮整批。

任务契约

  1. 用 asyncio.Semaphore 限制并发上限,而不是无界 gather。
  2. 对瞬时失败——429、503、超时——使用有界的指数退避重试。
  3. 对 400、404 等永久错误快速失败,不做重试。
  4. 隔离单项失败,返回结构化的成功与错误记录。

本地验证

FlyPython 仓库根目录下,先复现 starter 的失败,再验证审校过的 solution:

python examples/async-fetcher/verify.py starter --expect-failure
python examples/async-fetcher/verify.py solution

交给 coding agent

  1. 克隆仓库,用上面的命令复现 starter 失败。
  2. 任务契约 ↗交给你的 coding agent,只允许修改 starter/fetcher.py
  3. 运行 python examples/async-fetcher/verify.py starter,任何失败都视为未完成。
  4. 参考实现 ↗对比补丁——目标是同样的契约配最小可读的 diff,而不是相同的语法。

继续

这个示例在学习路线中的位置。

审校日期 2026-09-02 · 仓库内容版本 1。可以继续阅读对应学习路径、浏览仓库目录,或阅读 MCP 迁移指南了解规范背景。