所以我有一个非常有趣的场景,我想运行具有不同优先级的相同 Celery 任务,具体取决于它的调用位置 - 例如,我想为高级用户运行优先级高于非高级用户的任务。
使用文档,我能够设置多个队列,并且能够通过将所有 .delay 调用更改为.apply_async调用并传递额外的routing_key指定优先级队列来使其工作。问题是必须在很多不同的地方这样做。有没有更好的方法来解决这个问题?我试图尽可能避免更改视图中的代码,并且更愿意在任务或芹菜配置中处理此问题。
您可以使用部分评估,而不是定义单独的任务。
from celery.task import task
from functools import partial
@task
def do_something():
pass
premium_do_something = partial(do_something.apply_async, routing_key="premium")
do_something.async_apply()
premium_do_something()