Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 芹菜任务优先级_Python_Celery - Fatal编程技术网

Python 芹菜任务优先级

Python 芹菜任务优先级,python,celery,Python,Celery,我想用芹菜来管理任务。我希望有一个单一的任务队列(并发性为1),并且能够将具有不同优先级的任务推送到队列中,这样优先级较高的任务将抢占其他任务 我将向队列添加三个任务,如下所示: 添加任务.py from tasks import example_task example_task.apply_async((1), priority=1) example_task.apply_async((2), priority=3) example_task.apply_async((3), priori

我想用芹菜来管理任务。我希望有一个单一的任务队列(并发性为1),并且能够将具有不同优先级的任务推送到队列中,这样优先级较高的任务将抢占其他任务

我将向队列添加三个任务,如下所示:

添加任务.py

from tasks import example_task

example_task.apply_async((1), priority=1)
example_task.apply_async((2), priority=3)
example_task.apply_async((3), priority=2)
from __future__ import absolute_import, unicode_literals
from celery import Celery
from kombu import Queue, Exchange
import time

app = Celery('tasks', backend='rpc://', broker='pyamqp://')

app.conf.task_queues = [Queue('celery', Exchange('celery'), routing_key='celery', queue_arguments={'x-max-priority': 10})]


@app.task
def example_task(task_num):
    time.sleep(3)
    print('Started {}'.format(task_num)
    return True
我有以下配置:

任务。py

from tasks import example_task

example_task.apply_async((1), priority=1)
example_task.apply_async((2), priority=3)
example_task.apply_async((3), priority=2)
from __future__ import absolute_import, unicode_literals
from celery import Celery
from kombu import Queue, Exchange
import time

app = Celery('tasks', backend='rpc://', broker='pyamqp://')

app.conf.task_queues = [Queue('celery', Exchange('celery'), routing_key='celery', queue_arguments={'x-max-priority': 10})]


@app.task
def example_task(task_num):
    time.sleep(3)
    print('Started {}'.format(task_num)
    return True
我希望我添加的第二个任务在第三个任务之前运行,因为它具有更高的优先级,但它没有。它们按添加的顺序运行

我正在关注文档,并认为我已经正确配置了应用程序


我是做错了什么,还是误解了优先级特性

队列可能没有机会对消息进行优先级排序(因为它们是在排序之前下载的)。尝试以下两种设置(根据需要调整项目):

默认情况下,预取乘数为4

我开发了一个示例应用程序,以在非常小的规模上实现芹菜的优先任务。请看一看。在开发它的过程中,我遇到了一个非常类似的问题,这种设置的改变实际上解决了这个问题


请注意,您还需要RabbitMQ版本3.5.0或更高版本。

谢谢您的回答。我下载了您的项目,并完全按照您描述的设置运行它,但仍然没有看到优先级行为起作用。@EngineerCamp我在再次克隆它后重新检查,它似乎工作正常。有一个小的预览视频,只有一个芹菜工人,因此很容易观察到任务得到排序。在视频的开头(当视频被转码到360p时),观察一下当480p和720p被点击时,720p是如何获得更高的优先级的,即使在第一次点击480p时也是如此。我又试了一次,但仍然没有成功。我使用的是Python3和Ubuntu14.04,所以可能有一些不同。@EngineerCamp我的RabbitMQ版本是“3.5.7”。请在和上进行检查,您会注意到需要3.5.0或更高版本才能实现优先级队列。如果不是这样,那么请让我知道:)就是这样,原来我有一个非常旧的版本。我已经升级了,它工作得很好。谢谢你的帮助:)