我想使用 Celery 管理任务。我希望拥有一个单一的任务队列(并发数为 1),并能够按不同的优先级将任务推送到队列中,以使更高优先级的任务能够抢占其他任务。
我要像下面这样向队列添加三个任务:
add_tasks.py
我要像下面这样向队列添加三个任务:
add_tasks.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)
我有以下配置:
tasks.py
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
我希望我添加的第二个任务比第三个任务先运行,因为它具有更高的优先级,但实际上并没有。它们按照添加的顺序运行。
我正在遵循文档并认为我已正确配置应用程序。
我是做错了什么还是误解了优先级特性?