创建在后台运行的计时器

时间:2018-04-02 14:21:31

标签: python multithreading loops timer background

我正在制作客户端/服务器程序,而在客户端上,我想在GUI上显示一个显示运行时间的时钟。现在这里有很多关于如何制作时钟/计时器的教程,我想我已经把它放下了。

问题是制作一个在后台运行而其余代码执行的程序。目前我有一个我的计时器循环,代码没有经过,所以它只是开始计算定时器,然后在此之后不做任何其他事情。至少直到计时器停止为止。

我猜我需要找到一种让它在后台运行的方法,但我不知道如何找到答案。有人建议我应该使用线程/多线程,但这看起来有点复杂,我无法弄明白。

有没有更好的方法可以做到这一点,或者是想要走的路?

2 个答案:

答案 0 :(得分:0)

您可以通过从当前时间减去开始时间来跟踪自某个点以来经过的时间。然后,您可以使用此更新计时器值(如果您之间运行了很多其他代码,则会变慢,因此您可能需要对其进行舍入)。

import time

start = time.time()
while doing_stuff:
     do_stuff()
     GUI.update_timer(time.time() - start)

答案 1 :(得分:0)

我没有看到为什么线程不是一个好主意的任何理由。首先,如果您要在代码中运行复杂的计算,则线程将通过在后台同时运行代码和计时器来提高性能。这里有一些东西可以通过一个简单的函数来说明我的观点:

import time
import threading

def square():
    start_time = time.time()
    x = int(input('Enter number: '))
    squared = x*x
    print('Square is: %s ' %squared)
    print('Time elapsed: %s seconds' %(time.time() - start_time))


set_thread = threading.Thread(target=square) #set Thread() to run on square() function

set_thread.start()

#Output:
Enter number: 5
Square is: 25 
Time elapsed: 1.4820027351379395 seconds

当然,上面的简单功能可能只需几秒钟。计时器在调用函数时开始,并在square()块中的代码运行时停止。但是想象一下这样一种情况:您的代码具有更复杂的计算,例如将多个值插入数据库或排序大量数据并同时写入文件。