代码之家  ›  专栏  ›  技术社区  ›  Saifullah khan

Django Celery仅使用失败的数据集重试当前任务

  •  0
  • Saifullah khan  · 技术社区  · 7 年前

    我有以下代码

    from utils import SendSMS
    from celery.exceptions import *
    
    
    @celery.task(bind=True, max_retries=3)
    def send_sms(self,sms_list):
        failed_items = []
        for sms_item in sms_list:
            status = SendSMS( **sms_item )
            if status in ['Timeout','Error']:
                failed_items.append( sms_item )
    
        if len(failed_items) > 0:
            raise self.retry(failed_items)
    
        return "sms(s) send successfully."
    

    我想使用不同的数据集重试该任务,但只使用失败的项目。

    我的意思是,我怎样才能做到这一点:

    raise self.retry(failed_items) ?
    

    提前谢谢。

    2 回复  |  直到 7 年前
        1
  •  3
  •   sachin gera    6 年前
    @task()
    def add(self, x, y):
        if not x or not y:
            try:
               raise Exception("test error")
            except Exception, e:
                add.retry(args=[x, y], exc=e, countdown=30)
        return x+y
    
        2
  •  0
  •   Saifullah khan    6 年前
    @celery.task(bind=True, max_retries=2)
    def send_sms(self,**kwargs):
        sms_list = kwargs.get("sms_list",[])
        failed_items = []
        for sms_item in sms_list:
            status = SendSMS( **sms_item )
            if status in ['Timeout','Error']:
                failed_items.append( sms_item )
    
        if len(failed_items) > 0:
            exc = Exception(status)
            raise self.retry( exc=exc, sms_list=failed_items)
    
        return "sms(s) send successfully."