यह बहुत टूट गया है, मुझे आशा है कि तुम मेरे साथ दयालु हैं:कॉललाटर और एडकॉलबैक कैसे गठबंधन करें?
reactor.callLater(0, myFunction, parameter1).addCallback(reactor.stop)
reactor.run()
myFunction
रिटर्न एक आस्थगित।
मुझे आशा है कि यह स्पष्ट है कि मैं क्या करना चाहते हैं:
- जैसे ही रिएक्टर चल रहा है, मैं
myFunction
कॉल करना चाहते हैं। यही कारण है कि मैं देरी पैरामीटर के रूप में 0 का उपयोग कर रहा हूँ। क्या कॉललाटर को छोड़कर कोई दूसरा रास्ता नहीं है? यह इसके बारे में 0. - मैं रिएक्टर बंद करने के लिए जैसे ही
myFunction
कार्य पूरा कर लिया है चाहता हूँ एक देरी पारित करने के लिए अजीब लग रहा है।
समस्याओं मैं अब तक है:
AttributeError: DelayedCall instance has no attribute 'addCallback'
। काफी उचित! मैंmyFunction
द्वारा शुरू की गई कॉलबैक श्रृंखला में कॉलबैक कैसे लगा सकता हूं?exceptions.TypeError: stop() takes exactly 1 argument (2 given)
।
दूसरी समस्या मैं एक विशेष समारोह को परिभाषित करने के लिए किया था हल करने के लिए:
def stopReactor(result):
gd.log.info('Result: %s' % result)
gd.log.info('Stopping reactor immediatelly')
reactor.stop()
और करने के लिए कोड बदलने के लिए:
reactor.callLater(0, myFunction, parameter1).addCallback(stopReactor)
reactor.run()
(अभी भी, callLater समस्या की वजह से काम नहीं कर रहा है, लेकिन stopReactor
अब काम करेगा)
क्या reactor.stop
पर कॉल करने के लिए वास्तव में कोई अन्य तरीका नहीं है एक अतिरिक्त समारोह जुर्माना?
मुझे यह विकल्प बहुत पठनीय लगता है। 'लैम्ब्डा ने अनदेखा किया' थोड़ा सा जादू दिखता है: क्या आप यह स्पष्ट कर सकते हैं कि यह वास्तव में क्या करता है? – dangonfast
किसी डिफरर्ड पर कॉलबैक को तर्क के साथ बुलाया जाता है। 'reactor.stop' कोई तर्क नहीं लेता है। 'lambda अनदेखा: reactor.stop()' स्वीकार करता है और तर्क, इसे अनदेखा करता है, और कोई तर्क के साथ 'reactor.stop' कहते हैं। –
यह लिखने के लिए थोड़ा और पारंपरिक होगा: 'lambda _: reactor.stop' – DonGar