python 多处理 return 值时间

python multiprocessing return value time

我有一个读取 HDF5 文件和 returns 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 个。

谢谢!

问题是与 child 进程的通信成本。 child pickle 数据帧,将其发送到 parent 然后 parent unpickles 数据帧。这很容易比仅读取 parent.

中的数据帧更昂贵

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

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