相关疑难解决方法(0)

在Celery中为长时间运行的任务实现"空闲"和"正常"优先级队列

我正在尝试使用Celery实现以下方案:两个(相同)长时间运行任务的队列,一个用于"正常",另一个用于"空闲"优先级.

我让工作人员监视两个队列并首先从"正常"优先级队列中获取任务,如果它是空的,它将从"空闲"优先级中获​​取任务.

我的问题是:是否有可能保证工人检查任务排队的顺序?此外,这是实施优先事项的正确方法吗?

背景:任务正在运行ffmpeg转码作业."正常"优先级将是新视频(必须尽快转码),"空闲"优先级将是将旧(40.000+视频)存档重新转码为更新格式设置的任务.我没有多个服务器可用于执行多服务器任务调度.

django rabbitmq celery django-celery

8
推荐指数
1
解决办法
1098
查看次数

Celery和RabbitMQ - 队列优先级与消费者优先级与任务优先级

在我的python应用程序中,我使用Celery作为任务生产者和消费者,使用RabbitMQ作为经纪人.现在,我正在实施优先级.起初,它看起来根本不起作用,因为根据文档,我刚刚x-max-priority为队列添加了参数.我更深入地查看,并且我发现了另一个优先级 - 消费者优先级和任务优先级.所以,现在看起来有三种不同的优先级,我完全糊涂了.你能解释一下我的区别吗?

队列最高优先级:viz https://www.rabbitmq.com/priority.html

Queue('my_queue', exchange=Exchange('my_queue'), routing_key='my_queue', queue_arguments={'maxPriority': 10})
Run Code Online (Sandbox Code Playgroud)

消费者优先权:viz https://www.rabbitmq.com/consumer-priority.html

Queue('my_queue', exchange=Exchange('my_queue'), routing_key='my_queue', consumer_arguments={'priority': 10})
Run Code Online (Sandbox Code Playgroud)

任务优先级:viz https://github.com/celery/celery/issues/2635#issuecomment-173597053

my_task.apply_async(args=(arg1, arg2), priority=6)
Run Code Online (Sandbox Code Playgroud)

谢谢.

经过更多研究后编辑:

正如我在阅读后所理解的那样:

队列最大优先级是一种限制,并告诉该队列仅侦听优先级设置为max max到此参数的任务.但是优先级更高的任务呢?队列是否优先于自身最大定义?忽略它们?

消费者优先权看起来像消费者的优先次序.如果有两个具有不同优先级的消费者且两者都是免费的,则消费消息的第一个消费者是具有更高优先级的消费者.但是为什么它用Queue定义而不是消费者本身?

任务优先级应该是优先级,这对我的需求最重要.它告诉我应该以给定的优先级读取此消息.

因此,看起来最好的优先级将通过将所有优先级与多个worker和并发设置为1的组合来实现,而不是一个具有更高并发性且具有worker_prefetch_multipliertask_acks_late配置的worker .

你怎么看?是对的吗?

python rabbitmq celery

7
推荐指数
1
解决办法
729
查看次数

标签 统计

celery ×2

rabbitmq ×2

django ×1

django-celery ×1

python ×1