2015-03-24 13 views
6

Tôi có 96 tệp txt phải được xử lý. Ngay bây giờ tôi đang sử dụng một vòng lặp for và làm cho họ một lúc, quá trình này là rất chậm. 96 tệp kết quả, không cần phải hợp nhất. Có cách nào để làm cho họ chạy song song, ala Parallel.foreach trong C#? đang hiện tại:C# Parallel.Foreach tương đương trong 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() 

Muốn quá trình này để chạy song song cho tất cả các file trong source_dir.

+1

là quá trình chụp dài hay đây là việc đọc? –

+0

Trong trường hợp CPython, có khóa GIL (khóa thông dịch toàn cầu), bạn sẽ cần sử dụng mô-đun 'đa xử lý'. Nhưng bạn may mắn vì đã có nhiều thư viện của bên thứ ba được thực hiện trên đầu đa xử lý cho tính toán song song. – Shashank

+0

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

Trả lời

4

Giả sử rằng yếu tố giới hạn thực sự là xử lý chứ không phải I/O, bạn có thể sử dụng joblib để dễ dàng chạy vòng lặp trên nhiều CPU.

Một 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]