Saifullah khan
Saifullah khan

Reputation: 778

Django Celery retry current task with failed data set only

I have the following code

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."

I want to retry the task but with different data set, with only failed items.

I mean how can I achieve this line:

raise self.retry(failed_items) ?

Thanks in advance.

Upvotes: 0

Views: 541

Answers (2)

Saifullah khan
Saifullah khan

Reputation: 778

@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."

Upvotes: 0

sachin gera
sachin gera

Reputation: 103

@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

Upvotes: 3

Related Questions