【问题标题】:Creating a timer that runs in the background创建一个在后台运行的计时器
【发布时间】:2018-09-11 18:35:37
【问题描述】:

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

问题是让一个在后台运行,而其余代码执行。目前我的计时器有一个循环,代码不会过去,所以它只是开始计数计时器,然后不再做任何其他事情。至少在计时器停止之前。

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

有没有更好的方法或正在走的路?

【问题讨论】:

    标签: python multithreading loops timer background


    【解决方案1】:

    我看不出线程不是一个好主意的任何原因。一方面,如果您要在代码中运行复杂的计算,线程将通过在后台串联运行您的代码和计时器来提高性能。这里有一个简单的平方数函数可能有助于说明我的观点:

    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() 块中的代码运行时停止。但是想象一下,您的代码有更复杂的计算,例如将多个值插入数据库或对大量数据列表进行排序并同时写入文件。

    【讨论】:

      【解决方案2】:

      您可以通过从当前时间减去开始时间来跟踪从某个时间点开始经过的时间。然后你可以用这个来更新计时器的值(如果你有很多其他的代码在这之间运行会变慢,所以你可能想要四舍五入)。

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

      【讨论】:

        猜你喜欢
        • 2013-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        • 2020-11-13
        相关资源
        最近更新 更多