python多处理返回值时间



我有一个简单的函数,它读取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个。

谢谢!

问题在于与子进程的通信成本。子级拾取数据帧,将其发送给父级,然后父级取消拾取数据帧。这可能比只读取父级中的数据帧更昂贵。

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

此外,如果您可以将数据帧处理委托给子级,您将再次从多处理中受益。

最新更新