将清单传递给Django的芹菜工人



我使用了django 1.9/python 2.7/芹菜3.1.23/redis 2.10.5

芹菜在许多简单的任务中都可以正常工作,但是当我试图将列表传递给芹菜工人时,它行不通。一般目标是通过成功将大量ID传输到工人而不是30,000的时间来减轻工作过程。

我知道我必须将我的列表作为JSON格式。

设置:

CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_SERIALIZER = ['json']
CELERY_TASK_SERIALIZER = ['json']

tasks.py:

@periodic_task(run_every=crontab(minute=29, hour=12))
    def update(request=None):
        iddict = [23, 49, 81, 23]
        forceevaluation = list(sliceids)        
        sliceids2 = json.dumps(forceevaluation)    
        updatewikipediadescription2.apply_async(args=sliceids2, eta=now() + timedelta(seconds=a))

views.py

@shared_task
def updatetask(slice):
    for placeid in slice:
        print("ok")

芹菜总是显示以下错误:

[2017-03-10 12:29:04,031: ERROR/MainProcess] Task googleautocomplete.tasks.updatetask[94cdded2-0b2d-4304-aa14-6d97257c947c] raised unexpected: ValueError('task args must be a list or tuple',) 

知道为什么我会遇到此错误?

您没有传递列表,而是通过JSON倾倒列表的OUPUT。

sliceids2 = json.dumps(forceevaluation)创建一个字符串:

>> type(sliceids2) <type 'str'> 因此,当您运行时:

updatewikipediadescription2.apply_async(args=sliceids2, eta=now() + timedelta(seconds=a))

您只是通过一个字符串。

尝试:

updatewikipediadescription2.apply_async(args=[sliceids2,], eta=now() + timedelta(seconds=a))

相关内容

  • 没有找到相关文章

最新更新