Celery Tasks

100 views
Skip to first unread message

Willian Morais

unread,
Jun 18, 2015, 11:46:08 AM6/18/15
to django...@googlegroups.com
Bom dia!

Estou estudando a utilização do Celery em conjunto com Django, django-celery. Pintou um problema nos meus testes que não estou entendendo, preciso de uma ajuda.
@app.task(bind=True)
def add(self, a, b):
self.update_state(state='SUCCESS')
return a+b
Retorna
IntegrityError(NOT NULL constraint failed: celery_taskmeta.task_id)

Olhando as variáveis locais no trace, aparece que "task_id" não foi populada(None).

Fiz algo errado ou é algum problema quanto a utilização do django-celery.

--
Atenciosamente,

Willian de Morais
São José - Santa Catarina
Gtalk: willian...@gmail.com
Celular: (48) 8811-9660

Avraham Serour

unread,
Jun 18, 2015, 12:10:25 PM6/18/15
to django...@googlegroups.com
voce postou a definicao da funcao, a excecao provavelmete ocorre durante a execucao, o que voce tentou executar?

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Willian Morais

unread,
Jun 18, 2015, 12:12:56 PM6/18/15
to django...@googlegroups.com

Diego Garcia

unread,
Jun 18, 2015, 12:15:41 PM6/18/15
to django...@googlegroups.com
Você tentou chamar com .delay ?

add.delay(1, 2)

Willian Morais

unread,
Jun 18, 2015, 12:18:19 PM6/18/15
to django...@googlegroups.com
É isto! Faltou o bendito delay na view.

Obrigado!

Avraham Serour

unread,
Jun 18, 2015, 12:20:48 PM6/18/15
to django...@googlegroups.com
basicamente voce fez:

from NumericBase.tasks import add
>>> add(1,2)


>>>add.delay(1,2)

André Luiz

unread,
Jun 18, 2015, 2:33:28 PM6/18/15
to django...@googlegroups.com
Desde a versão 3 do Celery o Django-Celery não é mais necessário e está praticamente descontinuado, vendo aqui a ultima atualização dele foi em Janeiro, bem antes da versão 1.8 do Django ou seja talvez existam incompatibilidades.

Recomendo fazer a integração do Celery com o Django seguindo esse guia[1] que dispensa totalmente a necessidade desses bibliotecas a mais.

Willian Morais

unread,
Jun 19, 2015, 9:31:33 AM6/19/15
to django...@googlegroups.com
André,

Você está correto, aparentemente há incompatibilidades no django-celery. Estava testando passar um objeto serializado para uma "task" e sempre ocorria erro. Executando através do "celery -A projeto worker", ao invés de "manage.py celery worker" funcionou corretamente.

Só um detalhe, a documentação diz que para usar o Django ORM/Cache é necessário utilizar o django-celery, isto procede?

Quando necessito consultar uma tarefa através do AsyncResult estou utilizando o Django ORM/Cache?

André Luiz

unread,
Jun 19, 2015, 3:35:27 PM6/19/15
to django...@googlegroups.com
Se esse objeto serializado que você está passando for a instancia de alguma model NÂO faça isso em hipótese alguma[1], sempre prefira passar a pk do objeto para a task e então buscar o objeto dentro da task, o que meio responde sua primeira pergunta você pode fazer chamadas ao ORM (e ao cache) dentro da task sem qualquer problema, só nunca passe um objeto como parâmetro. 

Quando você usa o AsyncResult você está consultando o CELERY_RESULT_BACKEND a forma de acesso a ele depende de qual drive você está usando.

Reply all
Reply to author
Forward
0 new messages