2012-04-10 25 views
8

यहां दस्तावेज़ http://twistedmatrix.com/documents/current/api/twisted.internet.task.html#cooperate सुझाव देते हैं कि अंतर यह है कि सहकारी एक सहकारी टास्क देता है जबकि सहकारी एक डिफर्ड (मेरे स्वयं के परीक्षणों से प्रमाणित, दस्तावेज़ों में निर्दिष्ट नहीं) देता है। मैंने सप्ताहांत में ट्विस्ट की मूल बातें सीखने का निवेश किया है, इसलिए मैं समझता हूं कि एक डिफर्ड क्या है और मैं एक अच्छा लड़का रहा हूं जो थ्रेड/प्रक्रियाओं पर मेरे अवरुद्ध कोड को भेज रहा है। मैं समझता हूं कि जैसे ही ट्विस्टेड इसे अनुमति देता है, जबकि लूपिंगकॉल चयनित अंतराल पर आग लगने की कोशिश करता है।ट्विस्ट (पायथन) - सहयोग और सहवास के बीच क्या अंतर है?

मेरा झुकाव यह है कि सहकारी() कार्यों को सहकारी वस्तुओं के अंदर सहकारी समिति वस्तुओं और coiterate() के अंदर किया जाता है। यदि कोई सहयोग और सहवास के बीच व्यवहार में अंतर को सारांशित कर सकता है तो मैं इसकी सराहना करता हूं।

उत्तर

9

लगभग, लेकिन बिल्कुल नहीं। cooperatecoiterate से थोड़ा नया एपीआई है। cooperate आमतौर पर coiterate का थोड़ा बेहतर संस्करण है और आप इसे हमेशा उपयोग करना चाहते हैं। CooperativeTask लौटने से दो लाभ मिलते हैं। सबसे पहले, आप pause और resumestopping के बिना कार्य कर सकते हैं, और दूसरा, आप multiple Deferreds उत्पन्न कर सकते हैं जो आपको सूचित करता है कि जब कार्य एक दूसरे के साथ हस्तक्षेप किए बिना किया जाता है, तो केवल एक के बजाय।

दोनों coiterate और cooperate हुड के नीचे एक CooperativeTask उत्पादन, और दोनों उनके डिफ़ॉल्ट अनुसूचक के रूप में एक बहुत ही कम अंतराल LoopingCall का उपयोग करें। यदि आप एक अलग कार्य शेड्यूलर का उपयोग करना चाहते हैं तो आप हमेशा अपने Cooperator को तुरंत चालू कर सकते हैं।

(वैसे, अगर कोई दस्तावेज़ बग तथ्य यह है कि coiterate रिटर्न एक Deferred के लिए अभी तक है, एक दर्ज करें।)

+0

वास्तव में इस सवाल का जवाब मैं खोज रहा था और फिर कुछ। धन्यवाद! – pagga

संबंधित मुद्दे