0

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.

Saifullah khan
  • 686
  • 11
  • 19

2 Answers2

3
@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
sachin gera
  • 103
  • 1
  • 11
0
@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."
Saifullah khan
  • 686
  • 11
  • 19
  • you did good effort, my advice is to always explain the problem and how you solved it in your answer, see [StackOverFlow How do I write a good answer?](https://stackoverflow.com/help/how-to-answer) – Mohammad Kanan Mar 07 '18 at 21:23