मैं अनुक्रम बनाम अनुक्रम में फ़ाइलों को पढ़ने के बीच व्यापार-बंद के बारे में सोच रहा हूं।अनुक्रमिक या समांतर: पायथन में एकाधिक फ़ाइलों को पढ़ने का उचित तरीका क्या है?
मान लें कि मेरे पास एक लाख मेगाबाइट आकार की फाइलें हैं जिन्हें मैं संसाधित करना चाहता हूं, लेकिन उनमें से सभी को एक साथ रखने के लिए पर्याप्त स्मृति नहीं है। इन क्रमिक रूप से संसाधन के लिए, मैं कर सकते हैं:
results = [do_something(os.path.join(files, f)) for f in os.listdir(files)]
या मैं समानांतर में यह कर सकते हैं:
paths = [os.path.join(files, f) for f in os.listdir(files)]
p = multiprocessing.Pool()
try:
results = p.map(do_something, paths)
p.close()
p.join()
except KeyboardInterrupt:
p.terminate()
सामान्य तौर पर मैं गया है समानांतर प्रदर्शन मैं/हे क्योंकि यादृच्छिक डिस्क पढ़ने काफी है के खिलाफ चेतावनी दी धीमी गति से। लेकिन इस मामले में जाने के रास्ते समानांतर है? या शायद कुछ मिश्रित रणनीति?
इसके अलावा, मुझे लगता है कि समांतर संस्करण निर्देशिका की संरचना को संरक्षित करता है; यह कहना है, आउटपुट सही क्रम में है। क्या इसका मतलब यह है कि यह वास्तव में अनुक्रमिक रूप से कर रहा है, या पाइथन सिर्फ दयालु है? संपादित करें: ब्लेंडर ने इस दूसरे प्रश्न को मंजूरी दे दी। धन्यवाद, ब्लेंडर!
सहायता के लिए धन्यवाद।
'p.map' क्रम में चीजें देता है। आप 'p.map_async' या' p.imap_unordered' – Blender
पर विचार करना चाहेंगे, – yaccz
क्या करता है इस पर निर्भर करता है कि आप यह मान सकते हैं कि कुछ ऐसा महंगा महंगा कार्य है जो फ़ाइल की सामग्री का विश्लेषण करता है। – rhombidodecahedron