python多处理返回值时间

时间:2015-04-01 18:45:38

标签: python pandas multiprocessing

我有一个简单的函数,它读取HDF5文件并返回一个pandas dataFrame

import pandas as pd
import multiprocess as mp

def read_file(filename):
   store = pd.HDFStore(filename, 'r')
   df = store['df']
   return df


filename = ['20150320', '20150323','20150302']

T = Timer()
T.start()
pool = mp.Pool(processes=3)
results=pool.map(getG1X1Day, dates)
T.done('done')

我的输出是

load 20150323...: 8.363
load 20150320...: 8.898
load 20150302...: 11.316
done: 39.110

运行时间比单独读取每个文件的时间长。为什么会这样,以及如何解决这个问题?想要读取数百个文件并并行读取它们的X.

谢谢!

1 个答案:

答案 0 :(得分:0)

问题是与子进程沟通的成本。孩子挑选数据框,将其发送给父级,然后父级取消数据框的取消。这可能比仅仅读取父级中的数据帧更加昂贵。

由于在没有持有GIL的情况下完成了相当多的工作,您可能会发现线程池更快。用multiprocessing.pool.ThreadPool替换池,看看会发生什么。

此外,如果您可以将数据帧处理委派给子项,您将再次受益于多处理。