【问题标题】:Python Infinite loop is slowing over timePython无限循环随着时间的推移而变慢
【发布时间】:2020-10-04 09:39:14
【问题描述】:

我有一个函数,它是一个更大的无穷大的一部分。我发现该函数将循环减慢到最终我的计算机将完全冻结的程度。

import numpy as np
from time import time
 
  
def make_fps(d, F, df_f, state, t_start, PHASE, run_num):
    F += 1
    if F < 100:
        fps = np.NaN
        fps_average = np.NaN
    else:
        fps = round(F / (time() - t_start), 2)
        fps_average = np.NaN
    if F > 200:
        fps_average = round(df_f["fps"].mean(), 2)
    df = {'frame number': [F], 'fps': [
        fps], 'fps average': [fps_average], 'state': [state],  'run number': [run_num]}
    df_new = pd.DataFrame(data=df)
    df_f = df_f.append(df_new)
    print("frame number", F, "fps", fps, "average fps",
            fps_average,  "run number", run_num)
    return df_f, F, fps, run_num, fps_average

df_f = pd.DataFrame()
state = "this is a test"
t_start = time()
d, F, PHASE, run_num = 0,0, 0, 0       

while True:
    df_f, F, fps, run_num, fps_average = make_fps(d, F, df_f, state, t_start, PHASE, run_num)
    print (F, fps, fps_average)

我认为构建 DataFrame 会导致问题。另外,这个功能会从实现生成器中受益吗?我是 python 新手,不清楚如何正确应用生成器。

谢谢!

【问题讨论】:

  • 请解释一下你打算做什么......
  • 这个函数用在更大的应用程序中。目标是计算循环的速度 (fps)、循环的平均速度 (fps_average) 并构建一个稍后将保存到 .cvs 文件的数据帧。构建数据框会不会有问题?

标签: python pandas generator


【解决方案1】:

看起来你一遍又一遍地传递相同的参数。 我想不出为什么这可能是个好主意。 但是关于生成器的问题,把return换成yield就行了

祝你好运!

【讨论】:

  • 你称哪些参数“相同”?您指的是状态、PHASE 和 run_num 吗?这些值在作为最终解决方案一部分的其他函数中发生变化。为了这个例子的目的,我应该把它们编辑掉。当用yield 替换return 时,我还让参数吗?例如 return df_f, F, fps, run_num, fps_average 变成 yield df_f, F, fps, run_num, fps_average ?当我这样做时会出错。
  • df_f, F, fps, run_num, fps_average = list(make_fps(d, F, df_f, state, t_start, PHASE, run_num))[0] 也许
猜你喜欢
  • 2014-02-04
  • 2021-07-22
  • 1970-01-01
  • 2023-03-30
  • 2014-07-28
  • 2018-06-25
  • 1970-01-01
  • 2021-11-08
  • 2018-09-10
相关资源
最近更新 更多