Celery: Las tareas con expires fallan con AttributeError ("el objeto 'str' no tiene atributo 'isoformat'",)

Creado en 12 jun. 2017  ·  3Comentarios  ·  Fuente: celery/celery

Lista de Verificación

  • [x] He incluido el resultado de celery -A proj report en la edición.
    (si no puede hacer esto, al menos especifique el Apio
    versión afectada).
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

pasos para reproducir

  1. Cree una tarea que vuelva a intentarlo mediante raise self.retry()
  2. Llame a la tarea con send_task y establezca expires

Comportamiento esperado

La tarea debe volver a intentarlo hasta que se alcance el tiempo de vencimiento o se alcance el valor de max_retries.

Comportamiento 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 ✔

Comentario más útil

Una solución alternativa que parece solucionar el problema: reasignar el valor de self.request.expires antes de recaudar self.retry() .

Es decir, en el método de ejecución:

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

Todos 3 comentarios

Una solución alternativa que parece solucionar el problema: reasignar el valor de self.request.expires antes de recaudar self.retry() .

Es decir, en el método de ejecución:

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

probablemente esto esté arreglado y podamos cerrarlo? @thedrow

Parece un duplicado.
Pruebe la última versión de RC y vea si el problema está resuelto.
Si no es así, comente aquí y volveremos a abrir.

¿Fue útil esta página
0 / 5 - 0 calificaciones