Python代码中time()计算看似异常耗时的问题排查
问题分析与解答
你误解了耗时的来源:不是计算total_used_time耗时,而是_run_step函数的执行时间几乎等于0.99 * time_limit,以下是详细的代码执行流程分析:
代码执行流程拆解
以time_limit=0.5为例:
- 第一次进入
while循环:- 计算
total_used_time = time.time() - self.start,此时程序刚启动,耗时仅约1e-6秒,所以打印的s1、s2都是这个极小值。 - 调用
_run_step(env, self.agent_id, depth),这个函数的执行耗时接近0.99 * 0.5 = 0.495秒(对应输出里第二个s1的0.4996秒)。 - 打印
s3时,使用的是之前计算的旧total_used_time值,并未重新获取当前时间,所以s3的时间和s1、s2一致。
- 计算
- 第一次循环结束,回到
while开头:- 重新计算
total_used_time,此时距离self.start已经过去了_run_step的执行时间,满足total_used_time >= 0.99 * time_limit的条件,循环终止,打印depth=2。
- 重新计算
验证方法
你可以在_run_step调用前后添加时间打印,直接查看该函数的耗时:
print(f'before _run_step: {time.time() - self.start}') _, op = self._run_step(env, self.agent_id, depth) print(f'after _run_step: {time.time() - self.start}')
执行后就能清晰看到_run_step函数占用了大部分时间,而非total_used_time的计算操作。
内容的提问来源于stack exchange,提问作者Algo
相关产品推荐
相关产品推荐

