2016-03-25 14 views
0

Çok işlemcili kitaplığı kullanarak python'da çoklu okuma hakkında öğreniyorum. Bu amaçla, büyük bir dosyayı birkaç küçük parçaya bölen bir program oluşturmaya çalıştım. Bu nedenle, önce bu dosyadaki tüm verileri okudum ve daha sonra bu girdi dosyasındaki verilerin bir bölümünü alan ve bu segmenti bir dosyaya yazdıran çalışan görevleri oluşturun. Parça sayısı kadar çok sayıda paralel iş parçacığı olmasını beklerim, ancak bu gerçekleşmez. En fazla iki görev görüyorum ve program bundan sonra sona erecek. Ne hata yapıyorum. Kod aşağıda verilmiştir.Python'un çoklu işlemesi paralel olarak görev oluşturmuyor

import multiprocessing 

def worker(segment, x): 
    fname = getFileName(x) 
    writeToFile(segment, fname) 

if __name__ == '__main__': 
    with open(fname) as f: 
     lines = f.readlines() 
    jobs = [] 
    for x in range(0, numberOfSegments): 
     segment = getSegment(x, lines) 
     jobs.append(multiprocessing.Process(target=worker, args=(segment, x))) 
     jobs[len(jobs)-1].start() 
    for p in jobs: 
     p.join 
+0

istiyorum, bu yüzden programın aslında örtük onlar' sürece ne olacak (açıkça bu' Process'es engelleme değil re 'daemon'. – ShadowRanger

+0

Katılmayı aradım, kodun son iki satırını görün. – pythonic

+1

Bunu referansladınız. Onu kullanmadın. p.join 'p.join()' dan farklı _very_. – ShadowRanger

cevap

0

Process size (ana süreci ile, size iki süreci verir) bir ek iş parçacığı verir. Her döngü sonunda join numaralı çağrı, sonraki döngüye başlamadan önce bu işlemin bitmesini bekleyecektir. Process'u kullanmakta ısrar ederseniz, iade edilen işlemleri (muhtemelen bir listede) depolamanız ve geçerli döngünüzden sonra bir döngüdeki her işlemi birleştirmeniz gerekir.

Sen join` `aramayı unuttum, Bilginize multiprocessing ( https://docs.python.org/2/library/multiprocessing.html#module-multiprocessing.pool) den Pool sınıf

İlgili konular