Reputation: 778
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
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
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