Celery实现Python爬虫调度的核心是将任务标准化为异步、定时、可重试、可监控的作业,关键在于任务拆分、触发时机、失败处理与资源隔离。

用 Celery 实现 Python 爬虫调度,核心是把爬虫任务变成可异步执行、可定时触发、可重试、可监控的“标准作业”。关键不在写多少代码,而在理清任务拆分、触发时机、失败处理和资源隔离这几个环节。
APScheduler 适合单机轻量定时(比如每5分钟拉一次天气),但爬虫场景常需:
Celery 天然支持这些,尤其配合 Redis 或 RabbitMQ 做 broker,稳定性远超内存型调度器。
一个可用的 Celery 爬虫调度系统,至少包含:
立即学习“Python免费学习笔记(深入)”;
pip install redis,启动:redis-server
celery_app.py
celery -A celery_app.celery worker --loglevel=info
别把整个 Scrapy 项目塞进 task 函数。应按职责拆解:
fetch_category.delay(category_id=123, retry_count=0)
@app.task(bind=True, autoretry_for=(requests.RequestException,), retry_kwargs={'max_retries': 3, 'countdown': 60})
def fetch_page(self, url):
try:
resp = requests.get(url, timeout=10)
resp.raise_for_status()
save_to_db(parse_html(resp.text))
except requests.RequestException as exc:
raise self.retry(exc=exc)
注意:bind=True 让任务能调用 self.retry();autoretry_for 自动重试指定异常;countdown 控制重试间隔(首次失败后等60秒再试)。
Celery Beat 是独立调度进程,读取 CELERY_BEAT_SCHEDULE 配置,向 broker 发送周期性任务。不依赖系统 crontab:
celery_app.py 中配置:
CELERY_BEAT_SCHEDULE = {
'crawl-homepage-every-10-mins': {
'task': 'tasks.fetch_page',
'schedule': 600.0, # 秒
'args': ['https://example.com/']
},
'crawl-category-daily-at-2am': {
'task': 'tasks.fetch_category_list',
'schedule': crontab(hour=2, minute=0),
'args': [1]
}
}
celery -A celery_app.celery beat --loglevel=info
rate_limit='1/m' 或 throttle 插件限制单位时间调用次数CELERY_WORKER_LOG_FORMAT,方便用 ELK 或 Sentry 收集异常不复杂但容易忽略。把任务当接口写,把调度当服务用,爬虫才能长期稳住。
以上就是Python爬虫调度如何实现_celery与定时任务结合【教程】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号