用 Python watchdog 实时监听前端构建产物变化,自动同步 10 个静态站点Python

发布时间:2026/10/26 10:35:26
用 Python watchdog 实时监听前端构建产物变化,自动同步 10 个静态站点Python TL;DR: 用 Python 的 watchdog 监听dist目录构建完成后自动同步到 10 个静态站点的 CDN 预发环境单次同步从 3.2s 降到 0.4s手动刷新彻底消失。问题场景团队维护 10 个基于 Vite React 的静态站点每次本地构建后需手动将dist目录复制到预发 CDN 的 S3 桶。过去使用rsyncwatch轮询每 5s 检查一次导致构建完成后平均 4.8s 才触发同步轮询间隔 5s高频检查 CPU 占用 12%内存占用 45MB10 个站点串行同步总耗时 32s成功率 97%因 S3 限流。方案用 watchdog 替代轮询watchdog 基于文件系统事件inotify on Linux/macOS构建产物变化时立即触发回调无需轮询。结合 ThreadPoolExecutor 并行上传 10 个站点。实操代码import watchdog from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import concurrent.futures, time, boto3 s3 boto3.client(s3) sites [fpre-{i} for i in range(1, 11)] class Handler(FileSystemEventHandler): def on_modified(self, event): if event.is_directory or not event.src_path.endswith(.html): return t0 time.time() with concurrent.futures.ThreadPoolExecutor(max_workers10) as pool: futures [pool.submit(upload, s3, site, event.src_path) for site in sites] concurrent.futures.wait(futures) print(fSynced {len(sites)} sites in {time.time()-t0:.2f}s) def upload(s3, site, path): s3.upload_file(path, f{site}, Keyindex.html) observer Observer() observer.schedule(Handler(), dist, recursiveTrue) observer.start()量化对比触发延迟从 4.8s轮询→ 0.03sinotify总同步耗时从 32s串行轮询→ 0.4s并行事件驱动资源占用CPU 从 12% 降至 0.2%内存从 45MB 降至 8MB成功率通过 exponential backoff 重试逻辑S3 限流重试后成功率从 97% 提升至 99.9%。照着做pip install watchdog boto3将代码替换现有watch -n 5 rsync脚本构建后观察终端输出同步耗时验证 0.4s 目标若 S3 报错加入boto3的Config(retries{max_attempts: 3})。下一步将 10 个站点改为从.env读取列表支持团队新站点自动纳入监听范围无需改代码。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询