asynchronous - Python DeferredList callback reporting success when deferreds raise error -
मेरे पास निम्न सरल स्क्रिप्ट है:
#! / Usr / bin / env अजगर मुद्रित 'त्रुटि' डीईफ़ (परिणाम): प्रिंट 'समाप्त', परिणाम कार्यों = 'मुड़ें' [] D = getPage ('thiswontwork')। AddCallback (सफलता) .addErrback (त्रुटि) tasks.append (डी) डीएल = defer.DeferredList (कार्य) dl.addClallback (समाप्त) रिएक्टर.रन ()
< / पूर्व>यह निम्न आउटपुट का उत्पादन करता है:
त्रुटि समाप्त हो गई है [(ट्रू, कोई नहीं)]
मुझे यह त्रुटि कार्य वापस आने की उम्मीद है एक गलत क्योंकि getPages कार्य विफल रहता है और इसे कॉलबैक त्रुटि कहते हैं क्या कोई इस व्यवहार को समझा सकता है?
मुझे आपके विचार के रूप में चुना जाने से परे एक विचार जोड़ने दो:
अपने प्रश्न में आप पैरामीटर मुद्रित करते हैं कि आपके आस्थगित (सूची) कॉलबैक ( समाप्त
) के साथ कहा जाता है, और आप यह ध्यान रख रहे हैं कि आप इसे false < / कोड> (त्रुटि होने से पहले हो रहा है)
यह उम्मीद है कि आप जिस तरह से भ्रमित होने वाले रास्ते में स्थगित होने के बारे में सोच रहे हैं।
मुझे देखने दो कि मैं इसे अलग कर सकता हूं ...
(इस सब में बहुत सारे विवरण हैं और आसानी से, मैं अपनी पूरी कोशिश करने जा रहा हूं)
एक स्थगित है:
- फ़ंक्शन कॉलबैक की एक पंक्ति
- जो, कतार में प्रत्येक 'चरण' के लिए दोनों एक
कॉलबैक < / Code> और और
गलतियाँ
फ़ंक्शन कॉलबैक संचयित-
addCallbacks
(इसके बहुवचन पर ध्यान दें) आपको कॉलबैक और गलती दोनों को एक बार में जोड़ने की सुविधा देता है -
addCallback
एक कॉलबैक जोड़ता है (और कतार में अगली प्रविष्टि को छोड़ने के लिए गलती सेट करता है) -
addErbback
एक गलती जोड़ता है (और सेट करता है कॉलबैक को कतार में अगली प्रविष्टि पर छोड़ने के लिए) -
addBoth
एक गलती और कॉलबैक दोनों के रूप में एक फ़ंक्शन जोड़ते हैं ... जिसका मतलब है कि इसका पता लगाने की आवश्यकता क्यों है
-
से आकर्षित आर्ग के माध्यम से बुलाया जा रहा है: (... मुड़ डॉक्स में भी एक है)
यदि किसी फ़ंक्शन को एक कॉलबैक
के रूप में स्थगित किया जाता है और स्थगित अपनी 'फ़ायरिंग' में बिंदु तक पहुंच गया है, तो यह सफलतापूर्वक सफलतापूर्वक वापस आने से पहले, कॉलबैक
।
में परिभाषित समारोह में पिछले सफलतापूर्वक कार्य के वापस मूल्य के साथ स्थगित हो गया है। यदि किसी फ़ंक्शन को ग़लती और स्थगित अपनी 'फायरिंग' में उस बिंदु तक पहुंच गया जहां पिछले चरण में विफलता
ऑब्जेक्ट (या एक अपवाद उठाया, जिसने एक विफलता ऑब्जेक्ट में बदल दिया) को बदल दिया। तो ग़लती
उस विफलता
ऑब्जेक्ट से बुलाया जाएगा नोट! यदि गलती से कोई विफलता
नहीं लौटाता है, तो आस्थगित वापस कॉलबैक
श्रृंखला को कॉल करने के लिए फ़्लिप करेगा, गलती नहीं !
से आकर्षित:
यह सब एक साथ करने के लिए, आपके विचार में त्रुटि" मैं इस त्रुटि कार्य को गलत लौटने की अपेक्षा करता हूं "यह है कि समाप्त
isn किसी भी प्रकार की त्रुटि कार्य से नहीं बुलाया जाता, उसे स्थगित द्वारा बुलाया जाता है, और उस पर इसे केवल सफलता पर बुलाया जाता है (क्योंकि इसकी केवल callback एक के रूप में नहीं N गड़बड़ी
)
यदि आपने समाप्त
फ़ंक्शन को ग़लती
और कॉलबैक दोनों के रूप में लोड किया था कोड> (शायद addBoth
के माध्यम से), और आपने उत्तर की सलाह का पालन किया था कि आपको विफलता
ऑब्जेक्ट, आपका समाप्त < / कोड> फ़ंक्शन अभी भी तकनीकी रूप से पारित नहीं किया जाएगा गलत
! यह एक असफलता ऑब्जेक्ट प्राप्त होगा।
... जैसे मैंने कहा, इस सामान में बहुत सारे सबकुछ ...
यदि आप इनमें से कोई भी ढूंढते हैं सहायक (... या यहां तक कि अगर तुम नहीं - मैं एक लेखक के रूप में अच्छा नहीं हूँ), आप वास्तव में खुदाई के माध्यम से चाहिए मुझे लगता है कि आपको इस गाइड के माध्यम से जाने के बाद बहुत सारी फोकस मिलेगा।
Comments
Post a Comment