2

我想从同一个函数创建多个 celery 任务,它们在我传递给任务装饰器的参数上会有所不同。假设我想在我的系统中为付费和免费帐户设置不同的超时时间。

我期待以下列方式应用任务装饰器将起到作用:

def _update(x, y):
    ...    

update_free = task(soft_time_limit=300, time_limit=305)(_update)

update_paid = task(time_limit=1800)(_update)

但是我在日志中看到既没有update_paid也没有update_free注册为任务。相反,由于某种原因_update被注册为任务。

我不知道为什么 celery/django-celery 这样做,对我来说似乎很模糊。有谁知道如何解决这个问题?谢谢。

4

1 回答 1

2

Celery 的task装饰器在注册任务时使用被装饰函数的名称,并且在定义函数时该名称设置为“_update”:

>>> def _update(x, y):
...     pass
... 
>>> _update.__name__
  > '_update'
>>> update2 = _update
>>> update2.__name__
  > '_update'

您可以在装饰器中指定任务的名称:

update_free = task(name='update_free', soft_time_limit=300, time_limit=305)(_update)
update_paid = task(name='update_paid', time_limit=1800)(_update)
于 2013-04-28T11:47:15.547 回答