से अधिक विफल रहा है मैं एक वेब सेवा को अतुल्यकालिक रूप से उपभोग करने का प्रयास कर रहा हूं क्योंकि इसे वापस करने में 45 सेकंड तक लगते हैं। दुर्भाग्यवश, यह वेब सेवा कुछ हद तक अविश्वसनीय है और त्रुटियों को फेंक सकती है। मैंने django-celery
सेट अप किया है और मेरे कार्यों को निष्पादित कर रहा है, जो तब तक ठीक काम करता है जब तक कार्य max_retries
से अधिक विफल हो जाता है।कार्य से पुनर्प्राप्त max_retries
यहाँ मैं अब तक है:
@task(default_retry_delay=5, max_retries=10)
def request(xml):
try:
server = Client('https://www.whatever.net/RealTimeService.asmx?wsdl')
xml = server.service.RunRealTimeXML(
username=settings.WS_USERNAME,
password=settings.WS_PASSWORD,
xml=xml
)
except Exception, e:
result = Result(celery_id=request.request.id, details=e.reason, status="i")
result.save()
try:
return request.retry(exc=e)
except MaxRetriesExceededError, e:
result = Result(celery_id=request.request.id, details="Max Retries Exceeded", status="f")
result.save()
raise
result = Result(celery_id=request.request.id, details=xml, status="s")
result.save()
return result
दुर्भाग्य से, MaxRetriesExceededError
retry()
द्वारा फेंका नहीं किया जा रहा है, तो मैं कैसे इस कार्य की असफलता को संभालने के लिए यकीन नहीं है। Django पहले ही क्लाइंट को एचटीएमएल वापस कर चुका है, और मैं AJAX के माध्यम से Result
की सामग्री की जांच कर रहा हूं, जो पूर्ण विफल f
स्थिति में कभी विफल नहीं हो रहा है।
तो सवाल यह है कि: जब सेलेरी कार्य max_retries
से अधिक हो गया है तो मैं अपने डेटाबेस को कैसे अपडेट कर सकता हूं?
के बाद से लिंक जाहिरा तौर पर अब अप्रचलित है, [यहाँ है एक नया] [http://celery.readthedocs.org/en/latest/reference/celery.app.task.html?highlight=after_return#celery.app.task.Task.after_return) – rschwieb
धन्यवाद, उत्तर अपडेट किया गया। –