Celery: Tarefas com expiração falham com AttributeError ("objeto 'str' não tem atributo 'isoformato'",)

Criado em 12 jun. 2017  ·  3Comentários  ·  Fonte: celery/celery

Lista de controle

  • [x] Incluí a saída de celery -A proj report na edição.
    (se você não for capaz de fazer isso, pelo menos especifique o aipo
    versão afetada).
software -> celery:4.0.2 (latentcall) kombu:4.0.2 py:3.6.1
            billiard:3.5.0.2 py-amqp:2.1.4
platform -> system:Darwin arch:64bit imp:CPython
loader   -> celery.loaders.default.Loader
settings -> transport:amqp results:disabled

Passos para reproduzir

  1. Crie uma tarefa que tente novamente por meio de aumento self.retry()
  2. Chame a tarefa com send_task e defina expires

Comportamento esperado

A tarefa deve tentar novamente até que o tempo de expiração seja atingido ou o valor de max_retries seja atingido

Comportamento real

Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/celery/app/task.py", line 684, in retry
    S.apply_async()
  File "/usr/lib/python3.6/site-packages/celery/canvas.py", line 221, in apply_async
    return _apply(args, kwargs, **options)
  File "/usr/lib/python3.6/site-packages/celery/app/task.py", line 535, in apply_async
    **options
  File "/usr/lib/python3.6/site-packages/celery/app/base.py", line 729, in send_task
    root_id, parent_id, shadow, chain,
  File "/usr/lib/python3.6/site-packages/celery/app/amqp.py", line 334, in as_task_v2
    expires = expires and expires.isoformat()
AttributeError: 'str' object has no attribute 'isoformat'
Bug Report Duplicate ✘ Has Testcase ✔

Comentários muito úteis

Uma solução alternativa que parece corrigir o problema - reatribuir o valor de self.request.expires antes de levantar self.retry() .

Ou seja, no método run:

self.request.expires = dateparser.parse(self.request.expires)
raise self.retry()

Todos 3 comentários

Uma solução alternativa que parece corrigir o problema - reatribuir o valor de self.request.expires antes de levantar self.retry() .

Ou seja, no método run:

self.request.expires = dateparser.parse(self.request.expires)
raise self.retry()

provavelmente isso foi corrigido e podemos fechá-lo? @thedrow

Parece uma duplicata.
Experimente o RC mais recente e veja se o problema foi resolvido.
Se não for, comente aqui e reabriremos.

Esta página foi útil?
0 / 5 - 0 avaliações