मुझे भारी I/O बाध्य ऑपरेशन करना पड़ा, यानी बड़ी फ़ाइलों को पार्स करना और एक प्रारूप से दूसरे प्रारूप में परिवर्तित करना। शुरुआत में मैं इसे क्रमशः करता था, यानी एक के बाद एक पार्सिंग ..! प्रदर्शन बहुत खराब था (इसमें 90+ सेकेंड लगते थे)। तो मैंने प्रदर्शन में सुधार के लिए थ्रेडिंग का उपयोग करने का फैसला किया। मैंने प्रत्येक फाइल के लिए एक धागा बनाया है। (4 धागे)पायथन थ्रेडिंग और प्रदर्शन?
for file in file_list:
t=threading.Thread(target = self.convertfile,args = file)
t.start()
ts.append(t)
for t in ts:
t.join()
लेकिन मेरे विस्मय के लिए, कोई प्रदर्शन सुधार नहीं है। अब कार्य को पूरा करने में लगभग 9 0+ सेकंड लगते हैं। चूंकि यह I/O बाध्य संचालन है, इसलिए मैंने प्रदर्शन में सुधार करने की उम्मीद की थी।
धन्यवाद delty..लेकिन मल्टीप्रोसेसिंग मॉड्यूल की अपनी समस्याएं हैं। 1) मुझे अपने कोड को दोबारा प्रतिक्रिया देना है क्योंकि मैं इंस्टेंस विधियों का उपयोग नहीं कर सकता .. 2) मेरे पास एक इंस्टेंस विधि है जिसमें कई फाइल हैंडलर हैं .. फ़ाइल प्रक्रियाओं में फ़ाइल हैंडलर बंद हैं जो स्वीकार्य नहीं हैं। तो मुझे उन्हें फिर से खोलने की जरूरत है। दुर्भाग्यवश मेरे पास उन्हें जानने का कोई तरीका नहीं है क्योंकि ये तत्काल – kumar
के दौरान पारित किए गए हैं, यह एक अलग प्रक्रिया में निष्पादित फ़ंक्शन स्वयं नहीं होना चाहिए। क्या आप अलग प्रक्रियाओं में तत्काल भाग कर सकते हैं? उदाहरण के लिए। एक फ़ंक्शन या यहां तक कि एक अलग स्क्रिप्ट लिखें जो एकल तात्कालिकता और रूपांतरण करता है; फिर एक "मास्टर स्क्रिप्ट" लिखें जो इन कार्यों को चलाने के लिए मल्टीप्रोसेसिंग मॉड्यूल का उपयोग करता है। अलग-अलग स्क्रिप्ट [subprocess] (http://docs.python.org/library/subprocess.html) मॉड्यूल का उपयोग करके चलाया जा सकता है। यदि बहुत सारे साझा डेटा हैं, तो हां, यही वह जगह है जहां मल्टीप्रोसेसिंग जटिल हो जाती है। लेकिन उस मॉड्यूल में बहुत सारे टूल्स हैं :) – detly