【问题标题】:Timer in Python on WindowsWindows 上 Python 中的计时器
【发布时间】:2019-03-08 08:23:00
【问题描述】:

如果我有一个函数在 for 循环中被调用了很多次,而这个函数有时运行时间过长,我该如何为每次函数调用使用计时器(设置和重置每次的计时器)?

看起来像:

def theFunction(*args):
     #some code (timer is on)
     #In this point time is out, break and exit function
     #Timer is reseted
for i in range(0,100):  
     theFunction(*args)

【问题讨论】:

    标签: python windows


    【解决方案1】:

    像这样使用time 模块:

    import time
    
    time_start = time.time()
    #Do function stuff
    time_stop = time.time()
    #Check your time now
    timed_segment = time_stop - time_start
    #Repeat if needed
    

    要在 for 循环中多次运行,您需要在运行时将时间附加到列表中:

    import time
    
    def function():
        times_list = []
        for x in range(10)
            time_start = time.time()
            #Do function stuff
            time_stop = time.time()
            #Check your time now
            timed_segment = time_stop - time_start
            times_list.append(timed_segment)
            #Repeat as many times as needed
        return times_list
    

    如果您想在一段时间后break,您可以使用while 循环,如下所示:

    import time
    
    def function():
        times_list = []
        time_start = time.time()
        time_end = time.time()
        while time_end - time_start < 10: #after 10 seconds the while loop will time out
            #Your function does stuff here
            time_end = time.time()
            #Next, append times to a list if needed
            time_list.append(time_start - time_end)
        return times_list
    

    要在一段时间后停止该功能,无论它在哪里,我们都可以像这样使用threading

    import threading
    from time import sleep
    
    def do_stuff():
        sleep(10)
        print("1 + 2")
        return
    
    t = threading.Thread(target=do_stuff)
    t.start()
    t.join(timeout = 5)
    

    在上面的例子中,在join 中调用timeout 会在5 秒后杀死线程。如果我们打算像这样多次重用它,我们也可以将它放入装饰器中:

    import threading
    from time import sleep
    
    def timeout(func):
        def inner_func(*nums, **kwargs):
            t = threading.Thread(target=func, args=(*nums,))
            t.start()
            t.join(timeout=5)
        return inner_func
    
    @timeout
    def do_stuff(a,b):
        sleep(3)
        print(a+b)
        return
    
    do_stuff(1,3)
    

    【讨论】:

    • 如果我的函数以无限循环为例运行,这会起作用吗?我的意思是: Time_start=time.time() ||无限循环 // 我需要在 10 秒后打破这个循环 || Time_Stop=time.time()
    • 您能否通过在无限循环中运行您的函数来澄清您的意思。真正的无限循环会使您的程序崩溃。
    • 我在答案的底部添加了一段代码,以解决您正在寻找的问题。让我知道这是否有帮助
    • 好的,我对这个东西的问题是一个,我设置了我的计时器并做函数的东西,我的函数的东西会持续10分钟,例如,然后我们会得到time_end。但我不想为我的功能等待 10 分钟,在执行我的东西的 10 秒内,我想立即中断功能。是的...这是我的问题我知道我需要一个装饰器,但我不知道如何在函数调用循环中使用它,我需要在哪里停止并重新启动它...
    • @Developer 应该为你做这件事
    【解决方案2】:

    还有一个叫做timeit的模块可以测量小代码sn-ps的执行时间。我相信你也可以使用它。我从未使用过该模块,但它应该可以工作。

    这是文档页面的链接。看看吧::https://docs.python.org/2/library/timeit.html

    也见How to use timeit module

    【讨论】:

      【解决方案3】:

      为了高可重用性和易于实现,我建议 -

      【讨论】:

      • 当我使用循环调用函数时,link 会起作用吗?我已经尝试过了,但它引发了异常,并且在第一次调用后停止。
      • 你能告诉我你遇到的异常吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多