2015-02-24 7 views
0

Этой программы выводит количество строк каждого текстового файла по одному:Запуск нескольких программ из цикла

files = glob.glob('*.txt') # 5 files 
for f in files: 
    with open(f,'r') as fi: 
    lines = fi.read().splitlines() 
    print len(lines) 

Как я могу написать свой код так, что он работает 5 одновременных программ и выводит количество линии по каждой программе отдельно?

+0

Вы хотите сделать их в отдельных потоках? Или в разных процессах? – Oli

+0

потоки или процессы, которые быстрее? Мне нужно более быстрое вычисление. – jean

+0

@BhargavRao я исправил его – jean

ответ

2

Вот многопоточная версия вашей программы:

import threading 

# called by each thread 
def do_task(f) : 
    with open(f,'r') as fi: 
    lines = fi.read().splitlines() 
    print len(lines) 

threads = [] 
files = glob.glob('*.txt') # 5 files 
for f in files: 
    t = threading.Thread(target=do_task, args = (f)) 
    threads.append(t) 
    t.start() 

for t in threads : 
    t.join() 

И для развлечения здесь есть версия мульти-процесс:

from multiprocessing import Process 

# called by each thread 
def do_task(f, l) : 
    with open(f,'r') as fi: 
    lines = fi.read().splitlines() 
    l.append(lines) 

lengths = [] 
processes = [] 
files = glob.glob('*.txt') # 5 files 
for f in files: 
    p = Process(target=do_task, args = (f,lengths,)) 
    processes.append(p) 
    p.start() 

for p in processes : 
    p.join() 

for l in lengths: 
    print l 
+0

im не совсем уверен, как распределение процессов работает с ядрами ... однако * я думаю *, что в этом случае вы рискуете запустить все процессы на одном и том же ядре ... или один процесс на ядро, пока все ядра не будут иметь процесс а потом остальные просто укладываются или что? предполагая, что он использует какое-то круговое распределение, это, вероятно, прекрасно работает (не то, что это действительно так важно) –

Смежные вопросы