Celery: 有効期限のあるタスクはAttributeError( "'str'オブジェクトに属性 'isoformat'"、)で失敗します

作成日 2017年06月12日  ·  3コメント  ·  ソース: celery/celery

チェックリスト

  • [x] celery -A proj reportの出力を問題に含めました。
    (これができない場合は、少なくともセロリを指定してください
    影響を受けるバージョン)。
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

再現する手順

  1. レイズself.retry()介して再試行するタスクを作成します
  2. send_taskタスクを呼び出し、 expires

予想される行動

タスクは、有効期限に達するか、max_retries値に達するまで再試行する必要があります

実際の動作

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 ✔

最も参考になるコメント

問題を修正するように見える回避策- self.retry()を上げる前にself.request.expiresの値を再割り当てします。

つまり、runメソッドでは:

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

全てのコメント3件

問題を修正するように見える回避策- self.retry()を上げる前にself.request.expiresの値を再割り当てします。

つまり、runメソッドでは:

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

おそらくこれは修正されており、閉じることができますか? @thedrow

重複しているように見えます。
最新のRCを試して、問題が解決するかどうかを確認してください。
そうでない場合は、ここにコメントしてください。再開します。

このページは役に立ちましたか?
0 / 5 - 0 評価