在 Celery 中如何跟踪当前的重试? 我知道我可以做这样的事情:

@app.task(bind=True, default_retry_delay=900, max_retries=5)
def send_email(self, sender=None, to=None, subject=None, message=None):
  try:
    # Send email
  except Exception as e:
    # Print log message with current retry
    self.retry(e)

但我想说这是 try 1/5..2/5 等等。

#1楼 票数:18 已采纳

当前重试的次数可以在任务的request.retries属性中找到。

@app.task(retries=3, default_retry_delay=1)
def fail():
    try:
        assert False
    except Exception as e:
      print 'Try {0}/{1}'.format(fail.request.retries, fail.max_retries)
      # Print log message with current retry
      raise fail.retry(exc=e)


[2015-01-14 15:15:55,702: WARNING/Worker-1] Try 0/3
[2015-01-14 15:15:58,604: WARNING/Worker-3] Try 1/3
[2015-01-14 15:16:00,605: WARNING/Worker-2] Try 2/3
[2015-01-14 15:16:02,607: WARNING/Worker-6] Try 3/3
      

Celery 内部使用了类似的方法: https : //github.com/celery/celery/blob/b0cfa0d818743262a032c541cce2fa8c43fabad4/celery/app/task.py#L558

#2楼 票数:1

使用self

https://docs.celeryproject.org/en/latest/reference/celery.app.task.html?highlight=after_return#celery.app.task.Context

@app.task(bind=True, default_retry_delay=900, max_retries=5)
def send_email(self, sender=None, to=None, subject=None, message=None):
  try:
    # Send email
  except Exception as e:
    # Print log message with current retry
    print('Try {0}/{1}'.format(self.request.retries, self.max_retries))
    self.retry(e)

  ask by Paulo SantAnna translate from so

未解决问题?本站智能推荐:

2回复

重试块中芹菜任务的行为

我有一个关于中重试芹菜任务问题块 。 我的python版本是2.7.9 ,我的芹菜版本是3.1.18 当块中的单个任务失败时,似乎不会重试,而是整个块一起失败。 首先,有时会失败的任务: @app.task(bind=True, default_retry_delay=30, max_
1回复

芹菜任务不重试

我有一个简单的test_celery.py文件,其中包含以下内容,该文件不会重新运行失败的任务: 不幸的是,当我运行任务时,它只运行一次: 我确定我缺少明显的东西,但是我不知道自己在做什么错。
3回复

每次重试周期增加芹菜重试时间

我像在Docs-Example中那样用芹菜重试: 每次重试此作业时,如何增加重试倒计时 - 例如60秒,2分钟,4分钟等等,直到MaxRetriesExceeded被提升为止?
1回复

芹菜:拒绝和重试有什么区别?

我正在详细阅读关于拒绝和重试任务的Celery文档(链接在这里 )。 调用raise self.retry(exc=exc)和简单地调用raise Reject(exc, requeue=True)什么区别? 如果你要在拒绝时重新排队,那两者之间有什么区别吗? 你为什么要一个做另一个?
1回复

实时跟踪芹菜任务

我有一个主要的芹菜任务,该任务启动多个子任务(数千个)并执行多个操作(每个子任务相同的操作)。 我想要的是,从主要芹菜任务到每个动作的实时跟踪,每个子任务完成了多少,失败了多少。 综上所述! 主要任务:接收对象列表以及每个对象要执行的操作的列表。 对于每个对象,启动一个子任务
1回复

芹菜关闭工人并重试任务

我需要在 celery 任务中实现以下逻辑:如果满足某些条件,请关闭当前工作程序并重试任务。 在示例任务上测试:@app.task(bind=True, max_retries=1)def shutdown_and_retry(self, config): try: raise
1回复

我如何使芹菜重试请求直到成功

如果服务离线,尝试将数据发布到后端服务,我希望celery不断发出请求直到成功 我不断收到requests.exceptions.ConnectionError:URL超过最大重试次数 我已经尝试使用请求重试类,因为这不是解决方案,因为如果celery脱机,它不会保留任何数据,我正在寻找
1回复

如何在某些时间之前重试芹菜任务?

我阅读了有关Celery任务的文档 ,但无法理解我该怎么做。 我想启动一个任务,运行并每1秒重试一次。 3秒钟后,它应停止重试并返回默认值。 这是一个POC代码,无法正常运行: 任务应该在3秒后过期,但是MaxRetriesExceededError应该在10秒后引发。 但是当我