2015-03-24 5 views
6

में समकक्ष समकक्ष मेरे पास 96 txt फ़ाइलें हैं जिन्हें संसाधित करना है। अभी मैं एक लूप का उपयोग कर रहा हूं और उन्हें एक समय में कर रहा हूं, यह प्रक्रिया बहुत धीमी है। परिणामस्वरूप 96 फाइलें, विलय करने की आवश्यकता नहीं है। क्या उन्हें समानांतर में चलाने का कोई तरीका है, एला Parallel.foreach सी # में? वर्तमान कोड:सी # समानांतर। पाइथन

for src_name in glob.glob(source_dir+'/*.txt'): 
    outfile = open (...) 
    with open(...) as infile: 
     for line in infile: 
     --PROCESS-- 
    for --condition--: 
     outfile.write(...) 
    infile.close() 
    outfile.close() 

इस प्रक्रिया source_dir में सभी फ़ाइलों के लिए समानांतर में चलाना चाहते हैं।

+1

प्रक्रिया अधिक समय लग रहा है या इस पढ़ने है? –

+0

सीपीआईथॉन के मामले में, जिसमें एक जीआईएल (ग्लोबल दुभाषिया लॉक) है, आपको 'मल्टीप्रोसेसिंग' मॉड्यूल का उपयोग करने की आवश्यकता होगी। लेकिन आप भाग्यशाली हैं क्योंकि समांतर कंप्यूटिंग के लिए मल्टीप्रोसेसिंग के शीर्ष पर कई तृतीय-पक्ष पुस्तकालय बने हैं। – Shashank

+0

https://docs.python.org/3/library/multiprocessing.html – Hozikimaru

उत्तर

4

मानते हैं कि सीमित कारक वास्तव में प्रसंस्करण है और I/O नहीं है, तो आप एकाधिक CPUs पर आसानी से अपने लूप को चलाने के लिए joblib का उपयोग कर सकते हैं।

एक simple example from their documentation:

>>> from math import sqrt 
>>> from joblib import Parallel, delayed 
>>> Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in range(10)) 
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] 
संबंधित मुद्दे