python - 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()
解决方案
推荐阅读
- python - ManyToMany 字段未显示在模板中的 if 语句中
- node.js - Node.js https 模块在没有外部库的情况下发送 multipart/form-data
- javascript - 无限滚动触发事件太多次
- angular - Angular 9,如何通过 ngFor 聚焦 ng-select 中的特定字段
- javascript - 如何增加 Chrome 对网页的 GPU 分配?
- angular - 更新到 Angular 11 后 Ng 服务错误
- docker - KIbana 未连接到弹性搜索
- python - 改装 TPOT 回归器后无法重现分数
- java - 在 jenkins 脚本控制台上实际使用的是什么 jvm?
- .net-core - dotnet core 2.2 web api 添加为应用程序在 IIS 中不起作用