使用Python中的多处理读取多个文件并连接读取值

时间:2016-11-29 22:56:44

标签: python multiprocessing

我有100个csv文件,每个文件存储相同数量的列。我不是一次只读一个,而是想实现多处理。

为了表示,我创建了4个文件:Book1.csv,Book2.csv,Book3.csv,Book4.csv,它们在第A行第1行的每一个中存储数字1到5。

我正在尝试以下方法:

import pandas as pd
import multiprocessing
import numpy as np

def process(file):
    return pd.read_csv(file)

if __name__ == '__main__':
    loc = r'I:\Sims'
    fname = [loc + '\Book1.csv', loc + '\Book2.csv', loc + '\Book3.csv', loc + '\Book4.csv']
    p = multiprocessing.Pool()

    for f in fname:
        p.apply_async(process, [f])

    p.close()
    p.join()

我从link获得了上述代码的想法。

但是上面的代码并没有产生我期望的结果:

1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5

编辑: 我想在单独的处理器中加载每个文件并组合文件内容。由于我有100个文件要加载和组合内容,所以我希望一次抓住4个文件(我的PC有4个处理器),这个过程会更快。

1 个答案:

答案 0 :(得分:2)

尝试一下

import pandas as pd
import multiprocessing
import numpy as np

def process(file):
    return pd.read_csv(file)

if __name__ == '__main__':
    loc = r'I:\Sims'
    fname = [loc + '\Book1.csv', loc + '\Book2.csv', loc + '\Book3.csv', loc + '\Book4.csv']
    

    with multiprocessing.pool(5) as p: #Create a pool of 5 workers
        result = p.map(process, fname)
    print(len(result))