मैं @aix, multiprocessing
से सहमत हूं निश्चित रूप से जाने का तरीका है। भले ही आप बाध्य होंगे I - o केवल इतना तेज़ पढ़ सकते हैं, भले ही आप कितनी समानांतर प्रक्रियाएं चल रहे हों। लेकिन आसानी से कुछ गतिशील हो सकते हैं।
निम्नलिखित पर विचार करें (इनपुट/एक निर्देशिका है जिसमें प्रोजेक्ट गुटेनबर्ग से कई .txt फ़ाइलें शामिल हैं)।
import os.path
from multiprocessing import Pool
import sys
import time
def process_file(name):
''' Process one file: count number of lines and words '''
linecount=0
wordcount=0
with open(name, 'r') as inp:
for line in inp:
linecount+=1
wordcount+=len(line.split(' '))
return name, linecount, wordcount
def process_files_parallel(arg, dirname, names):
''' Process each file in parallel via Poll.map() '''
pool=Pool()
results=pool.map(process_file, [os.path.join(dirname, name) for name in names])
def process_files(arg, dirname, names):
''' Process each file in via map() '''
results=map(process_file, [os.path.join(dirname, name) for name in names])
if __name__ == '__main__':
start=time.time()
os.path.walk('input/', process_files, None)
print "process_files()", time.time()-start
start=time.time()
os.path.walk('input/', process_files_parallel, None)
print "process_files_parallel()", time.time()-start
जब मैं अपने डुअल कोर मशीन पर इस चलाने वहाँ एक ध्यान देने योग्य (लेकिन 2x) speedup है:
$ python process_files.py
process_files() 1.71218085289
process_files_parallel() 1.28905105591
फ़ाइलों काफी छोटा स्मृति में फिट करने के लिए हैं, और आप के बहुत सारे है, तो ऐसा करने के लिए प्रसंस्करण जो I/o बाध्य नहीं है, तो आपको बेहतर सुधार भी देखना चाहिए।
स्रोत
2011-10-15 09:01:54
यदि आपके पास कई फ़ाइलें हैं तो मुझे लगता है कि यह बहुत सी प्रक्रियाएं बनाएगा। मुझे यह प्रक्रिया मिली .process_files() 16.5930001736 process_files_parallel() 100.887000084 – yossi