Celery: Les tâches avec expiration échouent avec AttributeError ("L'objet 'str' n'a pas d'attribut 'isoformat'")

Créé le 12 juin 2017  ·  3Commentaires  ·  Source: celery/celery

Liste de contrôle

  • [x] J'ai inclus la sortie de celery -A proj report dans le numéro.
    (si vous n'êtes pas en mesure de le faire, spécifiez au moins le céleri
    version affectée).
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

Étapes à reproduire

  1. Créez une tâche qui réessaye via augmenter self.retry()
  2. Appelez la tâche avec send_task et définissez expires

Comportement attendu

La tâche doit réessayer jusqu'à ce que le délai d'expiration soit atteint ou que la valeur max_retries soit atteinte

Comportement réel

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 ✔

Commentaire le plus utile

Une solution de contournement qui semble résoudre le problème : réaffecter la valeur de self.request.expires avant d'augmenter self.retry() .

C'est-à-dire dans la méthode run :

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

Tous les 3 commentaires

Une solution de contournement qui semble résoudre le problème : réaffecter la valeur de self.request.expires avant d'augmenter self.retry() .

C'est-à-dire dans la méthode run :

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

cela est probablement corrigé et nous pouvons le fermer? @thedrow

On dirait un doublon.
Veuillez essayer la dernière RC et voir si le problème est résolu.
Si ce n'est pas le cas, commentez ici et nous rouvrirons.

Cette page vous a été utile?
0 / 5 - 0 notes