Большая часть времени выполнения подпрограммы из-за сборщика мусора? - PullRequest
0 голосов
/ 24 октября 2018

Я пытался ускорить выполнение кода Python, поэтому я использовал профилировщик, чтобы проверить, какая часть кода замедляет весь процесс.

Самая медленная процедура - это SeparateLFPhases, котораяВы видите на скриншоте ниже.И как вы можете видеть на скриншоте, в этой подпрограмме в основном преобладает сборщик мусора.

Мой вопрос: это нормально?Если да: почему это происходит?

Нормально ли это поведение или нет: есть ли у вас какие-либо предложения о том, как улучшить поведение этого gc?

Я пытался прочитать документациюна Python gc , но я не смог найти ответ.

Time execution profile of the code

Для справки, ниже вы также найдете код.

def SeparateLFPhases(df, impute=False, limit_FP=10, limit_LP=-8):
    '''Input is a Pandas DataFrame'''
    df['LP']=False
    df['FP']=False

    cycles=set(df['nCycle'])

    for n_cyc in cycles:
        selected=df['nCycle']==n_cyc
        cycle_df=df[selected]
        ov_day_row=cycle_df[cycle_df['ov_day']]
        if len(ov_day_row)>0:
            ov_day, row_name=ov_day_row.iloc[0]['cd'], ov_day_row.iloc[0].name

            df.at[row_name, 'ov_day']= True

            FP_days=cycle_df.loc[:row_name].iloc[:-1].index.tolist()
            for day_ in FP_days:
                df.at[day_, 'FP']= True

            LP_days=cycle_df.loc[row_name:].iloc[1:].index.tolist()
            for day_ in LP_days:
                df.at[day_, 'LP']= True
        else:
            if impute:
                ImputeFLP(df, cycle_df, n_cycle=n_cyc, limit_FP=limit_FP, limit_LP=limit_LP)
...