【问题标题】:Python: Pycharm runtimesPython:Pycharm 运行时
【发布时间】: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


    【解决方案1】:

    我正在回答我的问题,因为我在做一堆测试时偶然发现了答案,谢天谢地,当我用谷歌搜索解决方案时,其他人也有相同的 issue。关于为什么在进行 group_by 操作时使用分类列是一个坏主意的解释可以在上面的链接中找到。因此,我不打算在这里发布它。谢谢。

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2016-06-17
      相关资源
      最近更新 更多