正在生成来自交换'celeryresults'的具有随机GUID的队列。
当我使用延迟方法从shell发出任务时发生了这种情况,但我忘了在延迟的参数列表中输入我原始函数的参数。
我在运行芹菜工作者的终端显示错误:
[2015-02-20 18:42:48,547: ERROR/MainProcess] Task customers.tasks.sendmail_task[1a4daf49-81bf-4122-8dea-2ee76c2a2ff8] raised unexpected: TypeError('sendmail_task() takes exactly 4 arguments (0 given)',)
Traceback (most recent call last):
File "/home/cod/workspace/envs/cod/lib/python2.6/site-packages/celery/app/trace.py", line 240, in trace_task
R = retval = fun(*args, **kwargs)
File "/home/cod/workspace/envs/cod/lib/python2.6/site-packages/celery/app/trace.py", line 438, in __protected_call__
return self.run(*args, **kwargs)
TypeError: sendmail_task() takes exactly 4 arguments (0 given)
如何阻止生成随机队列?为什么这些消息不会使用默认队列?
答案 0 :(得分:2)
芹菜中的代理(发送/接收消息)和后端(存储/获取任务结果)之间存在差异。听起来你正在使用RabbitMQ作为消息代理和结果后端。
当RabbitMQ用作结果后端时,celery会为每个任务创建一个队列以暂时跟踪结果。这在文档的RabbitMQ Result Backend部分中进行了描述。
如果您不想要此行为,则应使用CELERY_IGNORE_RESULT将其关闭,或切换到Result Backend Settings中列出的其他后端实现之一。