📦 开源仓库:learn_pipeline_filters · 纯 Python 标准库 · 学习演示项目
一个巨型函数处理上传?改一处崩全身。管道-过滤器(Pipes and Filters)把请求拆成一串单一职责的过滤器,数据像 Unix 管道一样流过去——每个环节只做一件事,可以随插、随拔、随换序。
核心思路
上传文件
│
▼
[校验] → [病毒扫描] → [缩略图] → [落库] → [通知]
filter1 filter2 filter3 filter4 filter5
类比:cat log | grep ERROR | sort | uniq -c
- 单一职责:校验完全不知道落库的存在
- 可插拔:在病毒扫描和缩略图之间插一个水印过滤器,其他环节零改动
- 可重排:重建链条就能换执行顺序
- 可测试:拿假 context 就能单独测任意过滤器
- 提前终止:任一过滤器可以让整条流水线中止(坏类型、有病毒),下游不再执行
演示场景
- 正常路径:合法 PNG 通过全部 5 个过滤器
- 插入新过滤器:在 virus_scan 后插
watermark,链条变长其余不动 - 坏类型提前终止:
.exe在校验就被拒,下游过滤器不执行 - 病毒提前终止:
evil.png停在病毒扫描 - 重排:把 notify 挪到 thumbnail 之前,按新顺序执行
运行
python run_all.py
纯 Python 标准库,零第三方依赖,一键跑完所有演示场景后自动退出。
仓库:github.com/yxpil/learn_pipeline_filters,欢迎 Star 与提 Issue。