工作的累计时间?

时间:2018-06-08 17:10:09

标签: python time runtime

我已经将一些代码放在一起来完成我的工作。它工作正常,但它需要每4或5秒工作一次。因此,考虑到4-5secs规则,我已将以下代码添加到现有代码中。

#my code starts
import time, json, requests
start = time.process_time()

--- def 2 functions and do something with them ---

while True:
   with open('out.txt', 'a') as f:
        print("the result") +
              time.strftime('%Y-%m-%d %H:%M:%S',
                            time.localtime(time.time())), file=f)
  print(time.process_time() - start)
  time.sleep(2)

使用这个添加的代码,我在开头定义一个名为start的变量,并使用time.process_time() - start从最后的当前时间中扣除此变量。这样我就可以计算从一开始就经过了多少秒。由于此代码的结果:

print(time.process_time() - start)

我在终端窗口看到平均1.1秒的时间。

因此,在2秒的睡眠时间后,此代码再次运行,需要1.1平均。完成并将新结果和当前时间附加到out.txt文件。

我的问题是:

我希望out.txt行结束时的时间比前一行(2秒睡眠时间加上1.1运行时间)大3.1秒,但它让我在行之间有10秒的差异,这是我无法理解的。

为什么我在两个结果之间得到10秒的差异, 如何将其减少到3.1秒?

1 个答案:

答案 0 :(得分:0)

我不确定你要在这里完成什么,但我很确定process_time不是你想要用它的功能。该函数返回:

  

...当前进程的系统和用户CPU时间之和的值(以小数秒为单位)。它不包括睡眠时间。

所以,如果你做了1.1秒的工作并且睡了2秒钟,你会得到大约1.1而不是3.1,就像你看到的那样。 1 如果你想要步行时间,而不是处理器时间,不要使用此功能。

应该使用什么?这取决于你想要做什么。如果您想对代码进行基准测试,请使用timeit。要进行性能分析,请使用profile。对于通用挂钟时间处理,您通常需要datetime。如果您想要一个进程内作业调度程序,PyPI上有很多选择,具有不同的优点和缺点。 time模块具有构建其他模块所需的大部分低级内容,以及在熟悉处理struct tm之类的情况下模拟C API的函数,否则它通常不应该是你看的第一个地方。但是,如果你想在这里使用time,我怀疑你想要timemonotonic,而不是process_time

<子> 1。我不知道为什么你得到10秒。但是在你发布的代码中,你实际上并没有通过while True:循环重复慢速工作,你只是在文件中写一行并再次睡2秒。所以我假设你的真实代码有很大不同,我们正在寻找的是这些差异的一部分。