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. 创建一个通过 raise 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的值。

即,在运行方法中:

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

所有3条评论

似乎可以解决此问题的解决方法 - 在引发self.retry()之前重新分配self.request.expires的值。

即,在运行方法中:

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

可能这是固定的,我们可以关闭它吗? @thedrow

看起来像一个副本。
请尝试使用最新的 RC,看看问题是否已解决。
如果不是,请在此处发表评论,我们将重新打开。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

axiaoxin picture axiaoxin  ·  57评论

aromanovich picture aromanovich  ·  68评论

axsapronov picture axsapronov  ·  48评论

jenstroeger picture jenstroeger  ·  43评论

auvipy picture auvipy  ·  102评论