【发布时间】:2018-12-10 07:02:48
【问题描述】:
我目睹了 PyCharm 的一些奇怪的运行时问题,这些问题将在下面进行解释。该代码已在具有 20 个内核和 256 GB RAM 的机器上运行,并且有足够的内存可用。我没有展示任何实际功能,因为它是一个相当大的项目,但我很乐意根据要求添加细节。
简而言之,我有一个.py 文件项目,其结构如下:
import ...
import ...
cpu_cores = control_parameters.cpu_cores
prng = RandomState(123)
def collect_results(result_list):
return pd.DataFrame({'start_time': result_list[0::4],
'arrival_time': result_list[1::4],
'tour_id': result_list[2::4],
'trip_id': result_list[3::4]})
if __name__ == '__main__':
# Run the serial code
st = starttimes.StartTimesCreate(prng)
temp_df, two_trips_df, time_dist_arr = st.run()
# Prepare the dataframe to sample start times. Create groups from the input dataframe
temp_df1 = st.prepare_two_trips_more_df(temp_df, two_trips_df)
validation.logger.info("Dataframe prepared for multiprocessing")
grp_list = []
for name, group in temp_df1.groupby('tour_id'): ### problem lies here in runtimes
grp_list.append(group)
validation.logger.info("All groups have been prepared for multiprocessing, "
"for a total of %s groups" %len(grp_list))
################ PARALLEL CODE BELOW #################
for 循环 在 1050 万行和 18 列的数据帧上运行。在当前形式中,创建组列表(280 万组)大约需要 25 分钟。创建这些组,然后将其馈送到多进程池,其代码未显示。
25 分钟的时间相当长,因为我也完成了以下测试运行,只需要 7 分钟。本质上,我将 temp_df1 文件保存为 CSV,然后在预先保存的文件中进行批处理,并像以前一样运行相同的 for 循环。
import ...
import ...
cpu_cores = control_parameters.cpu_cores
prng = RandomState(123)
def collect_results(result_list):
return pd.DataFrame({'start_time': result_list[0::4],
'arrival_time': result_list[1::4],
'tour_id': result_list[2::4],
'trip_id': result_list[3::4]})
if __name__ == '__main__':
# Run the serial code
st = starttimes.StartTimesCreate(prng)
temp_df1 = pd.read_csv(r"c:\\...\\temp_df1.csv")
time_dist = pd.read_csv(r"c:\\...\\start_time_distribution_treso_1.csv")
time_dist_arr = np.array(time_dist.to_records())
grp_list = []
for name, group in temp_df1.groupby('tour_id'):
grp_list.append(group)
validation.logger.info("All groups have been prepared for multiprocessing, "
"for a total of %s groups" %len(grp_list))
问题 那么,是什么导致我只批处理文件时代码运行速度比当文件作为更上游的函数的一部分创建时快 3 倍?
提前致谢,请告诉我如何进一步澄清。
【问题讨论】:
标签: python performance