Python无限循环随着时间的推移而变慢
我有一个函数,它是一个更大的无穷大函数的一部分。我发现这个函数会减慢循环速度,最终我的电脑会完全冻结Python无限循环随着时间的推移而变慢,python,pandas,generator,Python,Pandas,Generator,我有一个函数,它是一个更大的无穷大函数的一部分。我发现这个函数会减慢循环速度,最终我的电脑会完全冻结 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:
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)
将numpy导入为np
从时间导入时间
def生成fps(d、F、df、状态、t启动、阶段、运行数量):
F+=1
如果F<100:
fps=np.NaN
fps_平均值=np.NaN
其他:
fps=四舍五入(F/(时间()-t_开始),2)
fps_平均值=np.NaN
如果F>200:
fps_average=四舍五入(df_f[“fps”].mean(),2)
df={'frame number':[F],'fps':[
fps],“fps平均值”:[fps_平均值],“状态”:[state],“运行次数”:[run_num]}
df_new=pd.DataFrame(data=df)
df_f=df_f.追加(df_新)
打印(“帧数”,F,“fps”,fps,“平均fps”,
fps_平均值,“运行次数”,运行次数)
返回df_f,f,fps,run_num,fps_average
df_f=pd.DataFrame()
state=“这是一个测试”
t_开始=时间()
d、 F,相位,运行数=0,0,0,0
尽管如此:
df_f,f,fps,run_num,fps_average=make_fps(d,f,df_f,state,t_start,PHASE,run_num)
打印(F、fps、fps_平均值)
我认为构建数据框架会引起问题。此外,此功能是否会从实现生成器中受益?我是python新手,不清楚如何正确应用生成器
谢谢大家! 看起来您一次又一次地传递相同的参数。 我想不出为什么这会是个好主意。 但关于生成器的问题,只需将
return
替换为yield
祝你好运 请解释一下你想做什么…这个函数在一个更大的应用程序中使用。目标是计算循环速度(fps)、平均循环速度(fps_average)并构建一个数据帧,该数据帧稍后将保存到.cvs文件中。构建数据帧是否会有问题?您将哪些参数称为“相同”?您指的是状态、阶段和运行数量吗?这些值在作为最终解决方案一部分的其他函数中更改。为了这个例子,我应该把它们删掉。当用
yield
替换return
时,我是否仍然允许参数?例如返回df\u f,f,fps,run\u num,fps\u average
变成收益df\f,f,fps,run\u num,fps\u average
?当我这样做时,会得到一个错误。df\u f,f,fps,run\u num,fps\u average=list(make\u fps(d,f,df\u f,state,t\u start,PHASE,run\u num))[0]