Django-Celery任务调用报错:缺少位置参数/NoneType无delay属性
问题原因及解决方法
两个错误的核心原因:视图中任务调用方式错误
第一个错误
missing 1 required positional argument:
你在views.py里写了tasks.say_hello_task().delay("john"),这里的say_hello_task()是直接执行任务函数本身,而非获取Celery任务对象。此时函数需要传入name参数,但你没传,因此触发参数缺失错误。第二个错误
NoneType' object has no attribute 'delay':
当你改成无参任务后,say_hello_task()执行后没有返回值(print语句不会返回内容),得到的结果是None。接着对None调用.delay()方法,自然会出现该错误。
正确的调用方式
调用Celery任务的.delay()方法时,不要给任务函数加括号,直接通过任务对象调用.delay()并传入参数:
tasks.say_hello_task.delay("john")
注:Worker能正常识别任务,说明任务注册流程是正常的,问题完全出在视图里的调用逻辑错误。
内容的提问来源于stack exchange,提问作者ParsaAi
相关产品推荐
相关产品推荐

