芹菜腌制错误与动态模型

时间:2013-07-10 09:47:26

标签: celery django-celery

我正在使用celery,它具有将数据写入数据库表的功​​能。

此表在models.py中没有相关模型,因为我使用django-mutant动态创建它。

当我运行我的任务时,它正确地写在我的动态表上,但在任务的最后我得到以下错误:

[2013-07-10 09:10:45,707: CRITICAL/MainProcess] Task topology_py.Functions.Functions.objectAggregate[aff70510-1e93-4610-b08c-c3675c92afe9] INTERNAL ERROR: PicklingError("Can't pickle <class 'mutant.apps.tss.models.1_tmp'>: import of module mutant.apps.tss.models failed",)
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/celery/task/trace.py", line 261, in trace_task
for callback in task_request.callbacks or []]
  File "/usr/lib/python2.7/site-packages/celery/canvas.py", line 197, in apply_async
return self._apply_async(args, kwargs, **options)
  File "/usr/lib/python2.7/site-packages/celery/app/task.py", line 472, in apply_async
**options)
  File "/usr/lib/python2.7/site-packages/celery/app/amqp.py", line 249, in publish_task
**kwargs
 File "/usr/lib/python2.7/site-packages/kombu/messaging.py", line 157, in publish
compression, headers)
  File "/usr/lib/python2.7/site-packages/kombu/messaging.py", line 233, in _prepare
body) = encode(body, serializer=serializer)
  File "/usr/lib/python2.7/site-packages/kombu/serialization.py", line 170, in encode
payload = encoder(data)
  File "/usr/lib/python2.7/site-packages/kombu/serialization.py", line 356, in dumps
return dumper(obj, protocol=pickle_protocol)
PicklingError: Can't pickle <class 'mutant.apps.tss.models.1_tmp'>: import of module mutant.apps.tss.models failed

芹菜正在搜索的模型,1_tmp未存储在我的应用程序中,名为 tss ,但在 mutant 应用程序表中。

我的问题是,如果我将此函数作为子任务链接到另一个子任务,celery会在第一个结束时以此错误终止!

有没有办法告诉芹菜在哪里找到这个模型或者无论如何都要跳过这个错误并进一步转到下一个子任务?

提前致谢。

编辑:目前,我可以使用5个不可变子任务在链中运行5个函数。它们正常工作并正确填充动态表,但第一个,只有第一个,继续产生描述的错误...你能告诉我为什么只有第一个给我错误,因为他们访问动态模型以相同的方式?

1 个答案:

答案 0 :(得分:0)

我解决了:这是我的第一个函数中的一个问题:我在执行结束时返回动态模型的一个对象,这使得一个芹菜/ django-mutant混乱。 这个对象完全没用,因此删除它的返回解决了这个问题。 谢谢大家。

相关问题