2013-07-10 3 views
0

Я использую сельдерей с функцией, которая записывает данные в таблицу базы данных.Ошибка отбора сельдерея с динамическими моделями

Эта таблица не имеет родственной модели внутри 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, но внутри мутант таблицы приложений.

Моя проблема заключается в том, что если я привяжу эту функцию как подзадачу к другой подзадаче, сельдерей заканчивается этой ошибкой в ​​конце первого!

Есть ли способ рассказать сельдерей, где найти эту модель или вообще пропустить эту ошибку и перейти к следующим подзадачам?

Заранее спасибо.

EDIT: В настоящий момент я могу запустить даже 5 функций в цепочке, используя 5 неизменных подзадач. Они работают правильно и правильно заполняют динамическую таблицу, но первая, и только первая, продолжают создавать описанную ошибку ... Можете ли вы дать мне и понять, почему только первый из них дает мне ошибку, так как они получают доступ к динамическая модель одинаковым образом?

+0

Итак, создаете ли вы эту динамически созданную связанную модель внутри задачи? – rednaw

+0

Нет, я динамически создаю модель раньше, и после этого я заполняю ее задачей. Задача сельдерея выполняет только sql-вставки ... – caneta

+0

Задачи сельдерея выполняются в отдельном процессе. Если вы динамически создали родственную модель, тогда запустите задачу Сельделия, задача не будет иметь эту динамически создаваемую связанную модель. Зачем вам все эти динамически созданные связанные модели? – rednaw

ответ

0

Я решил: это была проблема в моей первой функции: я возвращал объект динамической модели в конце ее выполнения, и это создало беспорядок в сельдере/джанго-мутанте. Этот объект был совершенно бесполезен, и поэтому удаление его решения решило проблему. Спасибо всем.

Смежные вопросы