parallel processing - recursive function calls and queuing in python -
मेरे पास मेरे कोड का स्केच निम्नानुसार है:
def func1 (c): (ए, बी) func2 (ए, एक्स) func2 (बी, एक्स) रिटर्न xx = [] वाई = Func2 (c, x) समस्या, जैसा कि आप कोड से पता लगा सकते हैं, यह है कि मुझे func2 (b) की गणना करना होगा func2 (a) के साथ समानांतर a से a को a < > func2 (क) । लेकिन मेरे एल्गोरिथ्म के अनुसार, यह स्पष्ट रूप से नए बी की वजह से नहीं हो सकता है। मुझे लगता है कि ऐसी समस्या समानांतर कंप्यूटिंग दृष्टिकोण के लिए बिल्कुल सही हो सकती है। लेकिन, मैंने इसे पहले प्रयोग नहीं किया था और इसके बारे में मेरा ज्ञान काफी सीमित था। मैंने सुझाव की कोशिश की, हालांकि, लेकिन मुझे ऊपर दिए गए स्केच जैसा ही परिणाम मिला।
चेतावनी: थ्रेडिंग आपके लिए समानांतर नहीं हो सकता है ( ग्लोबल इंटरप्रेटर लॉक पर ध्यान दें ) है, इसलिए आपको इसके बजाय मल्टीप्रोसेसिंग लाइब्रेरी का उपयोग करना पड़ सकता है।)। ... तो मैंने धोखा दिया / किया- आलसी & amp; एक धागा / प्रक्रिया तटस्थ शब्द "नौकरी" का इस्तेमाल किया आपको "नौकरी" का उपयोग करने वाले हर जगह के लिए थ्रेडिंग या मल्टी प्रॉससेसिंग चुनने की आवश्यकता होगी।
def func1 (c): वापसी ए, बी डीफ़ func2 (c, x): if condition: ए, बी = फेंक 1 (सी) x.append (ए, बी) a_job = कोई नहीं अगर (संख्या _एक्टिव जॉब () & gt; = NUM_CPUS): # ए और बी अनुक्रमिक रूप से func2 (a, x) अन्य: a_job = fork_job (func2, एक, एक्स) func2 (बी, एक्स) अगर a_job नहीं है कोई नहीं: शामिल (a_job) x = [] func2 (c, x) # सभी परिणाम अब x में हैं (y की आवश्यकता नहीं है) ... यह सबसे अच्छा होगा यदि आपको किसी कारण के लिए, एक साथ जोड़े जाने की जरूरत है। यदि आप शेड्यूलर जाने के लिए तैयार हो जाते हैं, तो आप उन्हें "नौकरी" कर सकते हैं & amp; फिर अंत में जुड़ें : def func1 (c): वापसी a, b def func2 (c, x): if condition: a, b = func1 ( c) x.append (a, b) यदि (number_active_jobs () & gt; = NUM_CPUS): # एक और बी क्रमिक रूप से func2 (a, x) अन्य: all_jobs.append (fork_job (func2, a, x)) # TODO : func2 (b, x) all_jobs = [] x = [] func2 (c, x) के लिए all_jobs में शामिल होने के लिए समान कार्य-या-अनुक्रमिक: शामिल होने के लिए (j) # सभी परिणाम अब x में हैं (आवश्यकता नहीं है y) NUM_CPUS जांच थ्रेडिंग के साथ किया जा सकता है। एक्टिवकाउंट () एक पूर्ण विकसित कार्यकर्ता threa pool () के बजाय लेकिन मल्टी प्रसंस्करण के साथ आप जुड़ने योग्य क़तार और कार्यकर्ताओं के एक निश्चित आकार पूल से अधिक काम करना चाहते हैं < / html>
Comments
Post a Comment