मैं पाइथन/ट्विस्ट में एसिंक्रोनस कोड लिखने के बारे में थोड़ा परेशान हूं। (तर्क खातिर) मैं दुनिया के लिए एक समारोह है कि एक नंबर लेने के लिए और वापस जाने के सही/गलत अगर यह प्रधानमंत्री/गैर-प्रमुख है जाएगा उजागर कर रहा हूँ मान लीजिए, तो यह इस तरह अस्पष्ट लग रहा है:ट्विस्ट: कोड को गैर-अवरुद्ध करना
def IsPrime(numberin):
for n in range(2,numberin):
if numberin % n == 0: return(False)
return(True)
(बस के लिए उदाहरण देकर स्पष्ट करना)।
अब कहें कि एक वेबसर्वर है जिसे सबमिट किए गए मान के आधार पर IsPrime को कॉल करने की आवश्यकता है। इसमें बड़े numberin
के लिए लंबा समय लगेगा।
यदि इस बीच में कोई अन्य उपयोगकर्ता छोटी संख्या की प्रारंभिकता के लिए पूछता है, तो रिएक्टर/स्थगित आर्किटेक्चर का उपयोग करके दो फ़ंक्शन कॉल को असीमित रूप से चलाने का कोई तरीका है ताकि शॉर्ट कैल्क का नतीजा वापस आ जाए लंबे कैल्क?
मैं समझता हूं कि यह कैसे करें यदि IsPrime कार्यक्षमता किसी अन्य वेबसर्वर से आई है, जिस पर मेरा वेबसर्वर एक स्थगित GetPage करेगा, लेकिन क्या होगा यदि यह सिर्फ एक स्थानीय कार्य है?
यानी, किसी भी तरह से IsPrime को दो कॉल के बीच समय-साझा किया जा सकता है, या इसके लिए एक नए धागे के स्पष्ट आमंत्रण की आवश्यकता होगी?
या, क्या IsPrime लूप को छोटे लूप की श्रृंखला में घुमाया जाना चाहिए ताकि नियंत्रण को रिएक्टर को तेजी से वापस किया जा सके?
या कुछ और?
जब आपके पास कोई ऐसा कार्य होता है जो वास्तव में बहुत समय लेता है, उदाहरण के लिए। यह "अवरुद्ध" है, आप इसे थ्रेड में चलाने के लिए 'deferToThread()' का उपयोग कर सकते हैं: http://twistedmatrix.com/documents/11.0.0/api/twisted.internet.threads.deferToThread.html –
या ट्विस्ट की प्रक्रिया समर्थन: http://twistedmatrix.com/documents/current/core/howto/process.html –
हां, मैंने एक [बहुत ही समान प्रश्न] लिखा है (http://stackoverflow.com/questions/5719782/confusion-about-cpu हाल ही में Node.js के लिए -इनेंट-कोड-इन-नोड-जेएस)। यह देखने में रूचि है कि समाधान मुड़ने में क्या हैं। – YXD