芹菜击败args:列表与元组

时间:2013-12-28 07:42:47

标签: python celery django-celery celerybeat

Celery docs describe如何将位置参数作为列表或元组传递给节拍计划的任务。

我有一个任务,它接受一个参数,一个整数列表:

@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 is iterable”TypeError。根据我的监视器(芹菜花),args以[1]传递。

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

我的问题是:当它是一个元组时,它是如何通过args的?为什么呢?

1 个答案:

答案 0 :(得分:5)

([1,])

这不是一个元组。在分组括号中只是[1,]。如果你想要一个1元素的元组,你需要像这样放一个逗号,以区别于括号表达式:

([1,],)

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

([1],)