Я пытался ускорить выполнение кода Python, поэтому я использовал профилировщик, чтобы проверить, какая часть кода замедляет весь процесс.
Самая медленная процедура - это SeparateLFPhases
, котораяВы видите на скриншоте ниже.И как вы можете видеть на скриншоте, в этой подпрограмме в основном преобладает сборщик мусора.
Мой вопрос: это нормально?Если да: почему это происходит?
Нормально ли это поведение или нет: есть ли у вас какие-либо предложения о том, как улучшить поведение этого gc
?
Я пытался прочитать документациюна Python gc , но я не смог найти ответ.
Для справки, ниже вы также найдете код.
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)