根据特定任务更改任务的默认倒计时 class?

Change the default countdown for tasks based on a certain task class?

我有一个自定义的 celery 任务 class,然后我在装饰器 @celeryApp.task 中使用它。我用 apply_async.

执行任务

我的任务class是:

class CeleryTask(Task):
    def run(self, *args, **kwargs):
        pass

    def on_success(self, retval, task_id, args, kwargs):
        pass

    def on_failure(self, exc, task_id, args, kwargs, einfo):
        pass

然后我声明我的任务如下:

@celeryApp.task(base=CeleryTask)
def my_celery_task(param1, param2):
    pass

最后我用 apply_async

执行它
my_celery_task.apply_async(
        (
            'value1', 'value2'
        ),
        countdown=2)

我想让所有基于 CeleryTask 的任务都倒计时 2。

但是我没有在文档中的任何地方看到如何操作。我查看了 celery.app.task:Task 但没有倒计时 属性.

是否有特定任务的默认倒计时 classes?

正如您所指出的,任务 class 不保持倒计时 属性。我认为这主要是因为倒计时是描述任务执行方式的东西——它不是描述任务本身的东西。

然而,这并不是世界末日。你有一个很好的解决方案。

  • 执行您的子任务class,确实具有"countdown" 属性。
  • 覆盖所有以"countdown"为参数的方法。它们的实现是微不足道的,因为它们将调用 superclass 方法,使用 coundown=self.m_countdown (或者你命名它)。