首页 > 解决方案 > Celery 调度程序 FIFO 队列

问题描述

我有许多工作(A、B、C),每天早上按计划开始。我已将这些发送给单个工作人员,以确保 A 不会在 B 之前执行。

有时,作业 A 可能需要更长的时间,与 B 和 C 的预定开始时间重叠。

这将导致作业按 A、C、B 的顺序执行。

我可以做一个解决方法,但想知道是否有我缺少的芹菜节拍调度程序的 FIFO?

示例代码

'''
celery_scheduler.py
'''
from run_celery import celery
from celery.schedules import crontab
import redis

schedule={}
schedule.update(
    {
        'job-elasticache_task1': {
            'task': 'my_celery.celery_scripts.task1',
            'schedule': crontab(minute=30, hour=8, day_of_week='1-5'),
        },
        'job-elasticache_task2': {
            'task': 'my_celery.celery_scripts.task2',
            'schedule': crontab(minute=35, hour=8, day_of_week='1-5'),
        },
        'job-elasticache_task3': {
            'task': 'my_celery.celery_scripts.task3',
            'schedule': crontab(minute=40, hour=8, day_of_week='1-5'),
        },
    }
)

'''
run_celery.py
'''
from celery import Celery
celery_task_list = ['my_celery.celery_scripts']

def makecelery(celery=None):
    celery = Celery(
        'mytasks', 
        broker="rediss://{connection_string}", 
        include=celery_task_list)
       
    '''prefetch one at a time'''
    celery.conf.task_acks_late = True
    celery.conf.worker_prefetch_multiplier = 1
    
    '''dedicated worker monitoring of dashboard data task refreshes'''
    celery.conf.task_routes = {
        'my_celery.celery_scripts.*':{'queue' : 'my_queue'},
}


    '''find any random tasks added'''
    celery.autodiscover_tasks()

    return celery

celery = makecelery()

标签: pythoncelerycelerybeat

解决方案


推荐阅读