2015-03-24 27 views
6

İşlenmesi gereken 96 txt dosyasına sahibim. Şu anda bir for döngüsü kullanıyorum ve her seferinde bir tane yapıyorum, bu işlem çok yavaş. Sonuçta elde edilen 96 dosya, birleştirilmeye gerek yoktur. C# paralel Parallel.foreach paralel olarak çalıştırmak için bir yolu var mı? Güncel kodu:C# Parallel.Fyteach eşdeğeri Python

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() 

bu süreç source_dir tüm dosyalar için paralel olarak çalıştırmak ister.

+1

süreç uzun sürüyor veya bu okuma mı? –

+0

Bir GIL (global yorumlayıcı kilidi) olan CPython söz konusu olduğunda, çok işlemcili modülü kullanmanız gerekir. Ancak şanslısınız çünkü paralel bilgi işlem için çok işlemcili bir çok üçüncü taraf kütüphanesi var. – Shashank

+0

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

cevap

4

Sınırlama faktörünün gerçekten G/Ç işlemlerini değil, işlediğini varsayarak, döngünüzü birden çok CPU üzerinde kolayca çalıştırmak için joblib kullanabilirsiniz. Bir 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]