एक "ब्लैक बॉक्स" टूल की तलाश में, जिसका उपयोग समानांतर "जेनेरिक" पायथन कार्यों में निष्पादित करने के लिए किया जा सकता है, मैं यह विश्लेषण करने का सुझाव my_function()
दूंगा कि हाथ से कैसे समानांतर किया जा सकता है।
सबसे पहले, my_function(v)
अजगर for
लूप ओवरहेड के निष्पादन समय की तुलना करें : [सी] पायथन for
लूप बहुत धीमी हैं, इसलिए समय my_function()
को नगण्य में खर्च किया जा सकता है।
>>> timeit.timeit('pass', number=1000000)
0.01692986488342285
>>> timeit.timeit('for i in range(10): pass', number=1000000)
0.47521495819091797
>>> timeit.timeit('for i in xrange(10): pass', number=1000000)
0.42337894439697266
दूसरी जाँच करें कि क्या कोई सरल वेक्टर कार्यान्वयन है my_function(v)
जिसके लिए छोरों की आवश्यकता नहीं है:F[:] = my_vector_function(X)
(ये दो पहले बिंदु बहुत तुच्छ हैं, मुझे माफ कर दो अगर मैंने उन्हें यहां पूर्णता के लिए उल्लेख किया है।)
तीसरा और सबसे महत्वपूर्ण बात, CPython कार्यान्वयन के लिए कम से कम, कि क्या जांच करने के लिए है my_function
यह समय के सबसे अधिक खर्च करता है के अंदर या बाहर वैश्विक दुभाषिया ताला , या जीआईएल । यदि जीआईएल के बाहर समय बिताया जाता है, तो threading
मानक पुस्तकालय मॉड्यूल का उपयोग किया जाना चाहिए। ( यहाँ एक उदाहरण है)। बीटीडब्ल्यू, कोई भी जी my_function()
एक्सटेंशन जारी करने के लिए सी एक्सटेंशन के रूप में लिखने के बारे में सोच सकता है ।
अंत में, यदि my_function()
जीआईएल जारी नहीं करता है , तो कोई multiprocessing
मॉड्यूल का उपयोग कर सकता है ।
संदर्भ: समवर्ती निष्पादन पर अजगर डॉक्स और समानांतर प्रसंस्करण पर सुन्न / डरावना इंट्रो ।