数据需要每天 / 每小时跑一次,怎么调度?
按数据量从小到大:
crontab(系统级):
- 适合:简单任务,每天 3 点跑一次
- 写法:
0 3 * /usr/bin/python3 /home/xxx/script.py - 缺点:没有日志、没有失败重试、依赖关系全靠人脑
schedule(Python 库):
- 适合:一个进程里跑几个定时任务
- 写法:
import schedule
schedule.every().day.at("03:00").do(my_job)
while True:
schedule.run_pending()
time.sleep(60)
|
- 缺点:不能分布式
APScheduler:
- 比 schedule 强,支持 cron 表达式、持久化、失败重试
Celery + Redis/RabbitMQ:
- 适合:分布式任务队列
- 工业级方案,大厂标配
Airflow:
- 适合:复杂 DAG(任务 A 完了才能跑 B,任务 B 和 C 并行)
- 学习成本大,中小项目慎用
我自己接单的经验:
- 单文件脚本 → crontab 足够
- 3-5 个任务互相依赖 → APScheduler
- 数据量大、要分布式 → Celery
- 客户明确要求可观测性 → Airflow
别一上来就上 Airflow,80% 的项目用 crontab 就够。
本文由 BBZ · 小朵科技工作室 出品。