我已经定义了一个Python函数,以利用所有CPU内核并行构建ARIMA(财务预测)模型。运行此代码的服务器具有48个核心。因此,我将我的大型Pandas数据帧分为40个分区(为了安全起见),并使用多处理模块的Pool函数并行处理所有分区。 “ func”是在将Statsmodels ARIMA应用于各个分区之后返回结果数据帧的函数。尽管我可以清楚地看到在UNIX Shell中多个进程正在同时运行,但是我没有观察到非并行处理的实际提速。我猜这是由于进程间通信较慢所致。我可以在代码中进行哪些更改以提高处理速度?
def MultiProcessing_dataframe(df, func):
n_Partitions = 40
df_split = np.array_split(df, n_Partitions)
pool = multiprocessing.Pool()
Results = pd.concat(pool.map(func, df_split))
pool.close()
pool.join()
return Results