首页 文章

使用Celery以不同的优先级运行相同的任务

提问于
浏览
2

所以我有一个非常有趣的场景,我希望以不同的优先级运行相同的Celery任务,具体取决于它的调用位置 - 例如,我想为优先级高的用户运行任务,优先级高于非高级用户 .

使用文档,我能够设置多个队列,并且能够通过将所有.delay调用更改为.apply_async调用并传入指定优先级队列的其他routing_key来使其工作 . 问题是必须在很多不同的地方做到这一点 . 有没有更好的方法来处理这个?我试图尽可能避免在我的视图中更改代码,并且更愿意在任务或芹菜配置中处理此问题 .

1 回答

  • 3

    您可以使用部分评估而不是定义单独的任务 .

    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()
    

相关问题