2015-03-24 23 views
6

Ho 96 file txt che devono essere elaborati. In questo momento sto usando un ciclo for e li faccio uno alla volta, questo processo è molto lento. I 96 file risultanti non devono essere uniti. C'è un modo per farli funzionare in parallelo, ala Parallel.foreach in C#? Codice attuale:C# Parallel.Foreach equivalente in 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() 

vogliamo che questo processo per l'esecuzione in parallelo per tutti i file in dir_sorgente.

+1

È il processo in corso lungo o è questa la lettura? –

+0

Nel caso di CPython, che ha un GIL (global interpreter lock), è necessario utilizzare il modulo 'multiprocessing'. Ma sei fortunato perché ci sono state molte librerie di terze parti realizzate in multiprocessing per il calcolo parallelo. – Shashank

+0

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

risposta

4

Supponendo che il fattore limitante sia effettivamente l'elaborazione e non l'I/O, è possibile utilizzare joblib per eseguire facilmente il ciclo su più CPU.

A 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]