0

我正在使用带有将数据写入数据库表的函数的 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

celery 正在搜索的模型1_tmp没有存储在我的名为tss的应用程序中,而是存储在突变应用程序表中。

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

有没有办法告诉 celery 在哪里可以找到这个模型,或者无论如何跳过这个错误并继续下一个子任务?

提前致谢。

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

4

1 回答 1

0

我解决了:这是我的第一个函数内部的一个问题:我在其执行结束时返回了一个动态模型的对象,这使得 celery/django-mutant 变得一团糟。这个对象完全没用,所以删除它的返回解决了这个问题。谢谢大家。

于 2013-07-11T13:57:19.707 回答