我可以在运行时在Task上定义celery队列属性吗?

ash*_*her 2 django celery

用例:

class MyTask(Task):
    queue = 'default_queue'

    def run(self):
        # do work
Run Code Online (Sandbox Code Playgroud)

通常,我将运行以下将使用指定的“ default_queue”的代码。

MyTask.delay()
Run Code Online (Sandbox Code Playgroud)

我需要做的是:

if hours_since_last_login > 24:
    MyTask.delay()   # using the queue 'high_priority_queue'
else:
    MyTask.delay()   # using the 'default_queue'
Run Code Online (Sandbox Code Playgroud)

我知道我可以继承MyTask的子类来覆盖queue属性,但是有没有一种在运行时定义它的方法?

这是以下正确的方法吗?

task = MyTask()
task.queue = 'high_priority_queue'
task.delay()
Run Code Online (Sandbox Code Playgroud)

ash*_*her 5

从IRC上的askol:

MyTask.apply_async(args=[], kwargs={}, queue='high_priority_queue')
Run Code Online (Sandbox Code Playgroud)