不使用Tk python创建秒表(不是倒计时或计时器)

不使用Tk python创建秒表(不是倒计时或计时器),python,python-2.7,Python,Python 2.7,我正在尝试为我的模块制作秒表功能。它将记录调用我的模块以导入到完全导入的时间。我之所以尝试记录这一点,是因为我的模块需要永远加载(因为它需要编译来自外部源的数据,并将这些数据合并到列表中)。永远是大约90秒。我查过类似的问题,但它只是关于创建倒计时或计时器。我有很多选择,只要它们利用python的内置模块。如果已经有类似的事情发生,如果你能告诉我,那就太好了。提前谢谢 如果您需要更多信息,请留言,我会给您回复。:) 编辑: 考虑到MeetTitan的回答,我制作了这个测试函数来尝试: def f

我正在尝试为我的模块制作秒表功能。它将记录调用我的模块以导入到完全导入的时间。我之所以尝试记录这一点,是因为我的模块需要永远加载(因为它需要编译来自外部源的数据,并将这些数据合并到列表中)。永远是大约90秒。我查过类似的问题,但它只是关于创建倒计时或计时器。我有很多选择,只要它们利用python的内置模块。如果已经有类似的事情发生,如果你能告诉我,那就太好了。提前谢谢

如果您需要更多信息,请留言,我会给您回复。:)

编辑:

考虑到MeetTitan的回答,我制作了这个测试函数来尝试:

def f():
    import time
    starttime = time.time()
    import tms # This is my module that takes forever to load
    print("Time Taken {}".format(int(time.clock() - starttime)))

>>> f()
Loading module. This may take up to 60 seconds.
Time taken -1419389848 # What does this mean?
下面是它在Python文档中所说的:

时钟

在Unix上,以浮点数形式返回当前处理器时间,以秒为单位。精度,事实上“处理器时间”含义的定义,取决于同名C函数的精度,但无论如何,这是用于基准测试Python或计时算法的函数

时间

以浮点数形式返回自历元以来的时间(秒)。请注意,尽管时间始终以浮点数形式返回,但并非所有系统提供的时间精度都优于1秒。虽然此函数通常返回非递减值,但如果系统时钟已在两次调用之间设置回原位,则它可以返回比上一次调用更低的值

输出数字应该是负数吗?这花了多少时间?如果我问的问题太多,我很抱歉

编辑:

我知道了

def f():
    import time
    start time = time.time()
    import tms
    print("Time taken {}".format(int(time.clock() - starttime)))
现在,这是我的最后一期。如何将其集成到现有代码中,以便在键入以下内容时:

>>> import tms
Loading module. This may take up to 60 seconds. # after 30 seconds...
Time taken 31.49 seconds
这是我的代码的开头:

import os, sys, time

# Does the code go somewhere here? How would I implement it?

print("Loading module. This may take up to 60 seconds.

tmlist = []
alltmlist = []
gen1tmlist = []
gen2tmlist = []

我提出了一个后续问题,希望我的“想法”能更有效地传播出去。单击。

如果要为代码段计时,则要使用
time.time()
方法。试试这个:

startTime = time.time()
#long running code here
print "Time taken {}".format(time.time() - startTime)
也来看看

如果你想要的是一个真正的倒计时,你可以试着睡n秒直到你达到90秒,就像这样:

timeTotal = 0
timeResolution = 0.5
waitUntil = 90
while timeTotal < waitUntil:
    time.sleep(timeResolution)
    timeTotal += timeResolution
    print "\r{} seconds left".format(waitUntil - timeTotal), 
timeTotal=0
时间分辨率=0.5
等待时间=90
而timeTotal
如果一行数据足以显示您的秒表,如何使用“回车”字符“\r”在控制台上重写一行数据

下面的代码是一个简单的倒计时计时器,它在固定的(非滚动的)行上显示100到0

关键是,先写空格,然后再写你想要的数据


在上面的代码中,“\r”是空白部分,“\r%d”是数据部分。

@Zizouz212,刚刚编辑,这应该更好。您可以将时间分辨率设置为等待不同的时间以获得更好的分辨率。我不知道第二次编辑是否回答了我的问题。现在我必须等待90秒才能导入模块(为什么我要避免
time.sleep
,因为我相信它会停止正在执行的所有代码)。而且,它并不总是需要90秒,有时45秒,有时30秒。我正在寻找一个秒表来记录导入模块所用的时间,而不是倒计时或计时器。。。很抱歉。请将其放在单独的线程中,这样您就不会阻止导入:),如果您想记录一个代码段所花费的时间,请查看我答案的上半部分。这就解释了。
time.clock()
据我所知是不推荐使用的。您还混合了
time.clock()
time.time()
,它们不会输出任何逻辑数据。如果负值持续存在,则绝对值是否正确?如果是这样的话,请使用它。看看我的编辑,我有一个打字错误-(重新复制并粘贴,您将很好:-)。尽管
time.clock()
已被弃用,但我还是喜欢它。您可以选择使用任何您更喜欢的,或在您的系统上提供最佳分辨率。但是请记住,如果执行
startTime=time.time()
操作,则必须执行
time.time()-startTime
,反之亦然。通常,将所有处理放在顶层不是一个好主意,而顶层是在导入时运行的。但它在一个函数中,在导入后由脚本调用。然后你可以很容易地修改、测试和检查正在发生的事情。我应该在另一页上重新问这个问题吗?我认为,从一开始,我试图实现的目标就没有实现。Keith,我想让我的模块告诉我导入所需的时间,我不想让人把函数、脚本和其他东西分开。
import sys, time
for num in range(100,0,-1):
    sys.stdout.write("\r    \r%d" % num)
    sys.stdout.flush()
    time.sleep(1)