है, तो मुझे सेलेरी और पायथन के साथ प्रारंभ करना शुरू हो रहा है, और मेरे पास एक प्रश्न है जो शायद बहुत आसान है, लेकिन मुझे लगता है कि कोई उपयुक्त उत्तर नहीं मिल रहा है ..पायथन सेलरी: यदि कोई अपवाद
यदि मेरे पास कार्य का एक गुच्छा है, और उनमें से एक फेंकता है, तो एक अपवाद है, क्या कार्य को पारित किए गए तर्कों को पुनः प्राप्त करने का कोई तरीका है?
उदाहरण के लिए, अगर मैं आईपी कुछ होस्ट नामों को हल प्राप्त करना चाहते हैं, और मैं भी कार्य बना ...
@tasks_app.task
def resolve_hostname(hostname):
return (hostname, {hst.address for hst in dns.resolver.query(hostname)})
... जो एक अपवाद फेंक सकता है, वहाँ हो रही का एक तरीका है उस अपवाद के दौरान उस hostname
कॉल के बाहर तर्क का मूल्य?
ip_subtasks = group(
resolve_hostname.s(hostname) for hostname in ['google.com',
'yahoo.com',
'failure.kommm']
)()
पिछले एक (कि failure.kommm
को हल करने की कोशिश करता है) एक अपवाद बढ़ा देंगे:
की मैं समूह का कहना है कि जैसे कार्यों करते हैं। मैं एक try/catch
अंदर अजवाइन कार्य की get()
विधि शामिल करना चाहते हैं, और (नीचे दिखाया गया जैसे कुछ) एक संदेश कह कुछ जब failure.kommm को हल करने की कोशिश कर गलत हो गया था दिखाने:
for ip_subtask in ip_subtasks:
try:
hostname, ips = ip_subtask.get(timeout=45)
except dns.exception.DNSException, e:
# I WISHED THIS WORKED:
logger.exception("Something happened when trying"
" to resolve %s" % ip_subtask.args[0])
तो, यही सवाल है ... क्या तर्कों को पुनः प्राप्त करने का कोई तरीका है यदि मेरे पास कार्य उदाहरण स्वयं है तो एक कार्य निष्पादित किया गया था?
अग्रिम धन्यवाद।
आप एक 'on_failure' हैंडलर को देखा है? http://celery.readthedocs.org/en/latest/userguide/tasks.html#on_failure – Ngenator
मेरे पास है, और मुझे लगता है कि यह काम करेगा, लेकिन मुझे नहीं पता कि यह कैसे उपयोग किया जाए जब कार्य के माध्यम से कार्य किया गया हो सजावटकर्ता जैसा ऊपर दिखाया गया है (जैसा कि मैंने कहा था, मैं सेलेरी के साथ नौसिखिया हूं) – BorrajaX
हैंडलर के ऊपर सेक्शन अनुभाग देखें, यह आपको एक अमूर्त वर्ग के साथ ऐसा करने का तरीका दिखाता है। – Ngenator