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,您将再次受益于多处理。
我有一个读取 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,您将再次受益于多处理。