【发布时间】:2012-05-26 10:05:36
【问题描述】:
所以我有一个非常有趣的场景,我想以不同的优先级运行同一个 Celery 任务,具体取决于它的调用位置 - 例如,我想为高级用户运行一个任务,其优先级高于非高级用户用户。
使用文档,我能够设置多个队列,并且能够通过将所有 .delay 调用更改为 .apply_async 调用并传入一个额外的 routing_key 来指定优先级队列,从而使其工作。问题是必须在很多不同的地方这样做。有没有更好的方法来处理这个?我试图尽可能避免更改视图中的代码,并且更愿意在任务或 celery 配置中处理此问题。
【问题讨论】:
-
为什么不做不同的任务呢?
-
然后我会重复相同的逻辑,所以我试图避免这种情况。我的另一个想法是向任务传递额外的参数以指示优先级并编写一个任务路由器来使用它来确定要传递哪个路由键。
-
使它成为一个单独的函数,你有 def func(params) 并且在这两个任务中你可以调用相同的函数。单元测试也更容易。
-
啊,我明白了。所以我基本上是在创建一个通用函数,然后让两个不同的函数调用它。看起来有点矫枉过正,但有道理。
-
是的,我也不太喜欢。但是,在未来,它更容易管理和跟踪。这是一个务实的解决方案。
标签: django celery django-celery