1

Celery 文档描述了如何将位置参数作为列表或元组传递给节拍调度任务。

我有一个任务,它需要一个参数,一个整数列表:

@shared_task
def schedule_by_ids(ids):
  ...

我的 celerybeat 时间表如下所示:

CELERYBEAT_SCHEDULE = {
    'schedule_by_ids': {
        'task': 'myproj.app.tasks.schedule_by_ids',
        'schedule': crontab(minute='*/10', hour='8-21'),
        'args': ([1,]),
    },
}

我的任务因 "int is not iterable" 而失败TypeError。根据我的显示器(芹菜花),args 以[1].

当我将 args 设为列表时,例如[[1]]arg 会显示在监视器中,[[1]]并且它工作正常。

我的问题是:当它是一个元组时,它是如何传递参数的?为什么?

4

1 回答 1

7
([1,])

那不是一个元组。那只是[1,]在分组括号中。如果你想要一个 1 元素的元组,你需要像这样在里面放一个逗号,以将它与带括号的表达式区分开来:

([1,],)

我怀疑您可能放错了逗号,并且您打算这样做:

([1],)
于 2013-12-28T09:51:31.177 回答