python中的并行进程csvs

时间:2015-09-04 08:11:33

标签: python csv

我有这段代码,它从csv的顶行读取一个字段 并将其写入新列

然后保存csv,忽略不再需要的第一行和第三行。

问题是我要处理50,000多个csv。 是否可以将其并行以便它运行得更快? 我需要这样做几次,这有点太慢了。

import glob
import csv
import os

path = '/in/'
out = '/out/'

for fname in glob.glob(path):
    with open(fname) as csv_open:
        print j
        raw_name = os.path.basename(fname)
        outname = os.path.join(out, raw_name)

        reader = csv.reader(csv_open)

        all_t = []            
        row0 = reader.next()
        train = row0[0]

        row1 = reader.next()
        row1.append('Loco')
        all_t.append(row1)

        reader.next()

        for i, row in enumerate(reader):
            row.append(train)
            all_t.append(row)

        with open(outname, 'w') as csv_out:
            write_func = csv.writer(csv_out, lineterminator='\n')
            write_func.writerows(all_t)

1 个答案:

答案 0 :(得分:0)

您绝对可以生成多个线程/进程来并行运行该任务。看看(注意我假设您使用Python 2作为print j语句):

但请注意,Python的threading可能not behave as you would expect。所以也许multiprocessing就是你要找的东西:创建一些进程并使用multiprocessing.Queue传递它们的文件名(让进程保持活动状态并传递多个文件名,而不是创建一个新进程每个新文件)。

此外,您的瓶颈可能在于系统的I / O吞吐量(意味着最慢的部分可能是读取和写入这些CSV)。在这种情况下,并行化实际上并没有多大帮助。

您还可以尝试优化代码(或者使用其他模块甚至可能加速处理的编程语言)。但我认为这不是最值得花时间的步骤。

我会首先进行多处理,直到添加更多进程并不能提高性能(如果瓶颈是系统的I / O吞吐量,那么可能会比以后更早发生)。然后我或许会尝试优化处理代码。然后,如果它仍然很慢,我会耐心等待脚本完成执行,同时继续我的工作。