我有一个简单的函数,它读取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.
谢谢!
答案 0 :(得分:0)
问题是与子进程沟通的成本。孩子挑选数据框,将其发送给父级,然后父级取消数据框的取消。这可能比仅仅读取父级中的数据帧更加昂贵。
由于在没有持有GIL的情况下完成了相当多的工作,您可能会发现线程池更快。用multiprocessing.pool.ThreadPool
替换池,看看会发生什么。
此外,如果您可以将数据帧处理委派给子项,您将再次受益于多处理。