本篇内容包括Celery多队列,异步任务失败重试,任务执行过程的监控,以及生产环境下在服务器上如何管理以及维护好每一个队列等等。
1.celery分布式队列,优先级队列,任务失败重试
这里简单的说一下多队列的使用场景,比如说你现在的系统中一共有两个异步任务,其中任务A花费时间大约是5秒,任务B花费时间大约是0.5秒。任务B的重要性比任务任务A要高很多很多。系统每次都会往队列中放10个任务A和一个任务B。在并发量很大的情况下就会因为任务A花费时间较长从而造成队列阻塞,导致后边特别多的任务B需要较长的等待时间才可以被执行。
而如果你的系统中共有两个队列,就可以为不同的队列分别设置worker去各自消费各自的消息,从而达到以上的效果。或者可以设置优先级队列也可以实现。
(1)首先说下多队列
# 配置 queue 队列
CELERY_QUEUES = (
Queue('default', routing_key='default'),
Queue('queue_item', routing_key='apps.item.tasks'),
Queue('queue_daily', routing_key='apps.daily.tasks'),
)
# 配置每一个Task的Router
CELERY_ROUTES = {
'apps.item.tasks.event_list': {
'queue': 'queue_item',
'routing_key': 'apps.item.tasks',
},
'apps.item.tasks.actual_personday': {

本文介绍了Celery如何实现多队列和优先级队列以优化任务执行,以及任务失败时的重试机制。通过配置不同队列,可以确保高优先级任务优先执行,减少等待时间。同时,文章提到了使用Flower进行任务监控,方便在生产环境中排查问题。此外,还推荐了Supervisor作为进程管理工具,确保worker的稳定运行。
最低0.47元/天 解锁文章
3048





