Windows上Python中的计时器

Windows上Python中的计时器,python,windows,Python,Windows,如果我有一个函数在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(*

如果我有一个函数在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)

使用
时间
模块,如下所示:

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
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)
如果要在一定时间后
中断
,可以使用
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
在上面的示例中,在
join
中调用
timeout
将在5秒后终止线程。如果我们计划多次重复使用它,我们也可以将其放入装饰器中:

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
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)

使用
时间
模块,如下所示:

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
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)
如果要在一定时间后
中断
,可以使用
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
在上面的示例中,在
join
中调用
timeout
将在5秒后终止线程。如果我们计划多次重复使用它,我们也可以将其放入装饰器中:

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
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)

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

这是指向文档页面的链接。看一看:


另请参见

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

这是指向文档页面的链接。看一看:


如需有关高可重用性和易于实现的信息,请参见-

  • 使用装饰器-

    from time import time
    
    def time_it(func):
      def wrapper(*args, **kwargs):
        a=time()
        func(*args, **kwargs)
        print(a-time())
      return wrapper
    
    
    @time_it
    def foo(s='this works'):
      print(s)
    
    foo()
    
  • 使用profile.run-


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

  • 使用装饰器-

    from time import time
    
    def time_it(func):
      def wrapper(*args, **kwargs):
        a=time()
        func(*args, **kwargs)
        print(a-time())
      return wrapper
    
    
    @time_it
    def foo(s='this works'):
      print(s)
    
    foo()
    
  • 使用profile.run-


如果我的函数运行在一个无限循环的例子中,这会起作用吗?我的意思是:Time_start=Time.Time()| | |无限循环//我需要在10秒后打破这个循环| | | Time_Stop=Time.Time()你能澄清一下在无限循环中运行函数的意思吗。一个真正的无限循环会使你的程序崩溃。我已经在我的答案底部添加了一段代码,以解决你似乎在寻找的问题。让我知道如果那个助手,我的问题是,我设置计时器,做函数,我的函数会持续10分钟,然后我们会得到时间结束。但是我不想等我的函数的东西10分钟,在执行我的东西的10秒内,我想立即破坏函数。赞成。。。这是我的问题,我知道我需要一个装饰器,但我不知道如何在函数调用循环中使用它,我需要停止并重新启动它…@developer应该为你做这件事,如果我的函数运行在一个无限循环的例子中,这会起作用吗?我的意思是:Time_start=Time.Time()| | |无限循环//我需要在10秒后打破这个循环| | | Time_Stop=Time.Time()你能澄清一下在无限循环中运行函数的意思吗。一个真正的无限循环会使你的程序崩溃。我已经在我的答案底部添加了一段代码,以解决你似乎在寻找的问题。让我知道如果那个助手,我的问题是,我设置计时器,做函数,我的函数会持续10分钟,然后我们会得到时间结束。但是我不想等我的函数的东西10分钟,在执行我的东西的10秒内,我想立即破坏函数。赞成。。。这是我的问题,我知道我需要一个装饰器,但我不知道如何在函数调用循环中使用它,我需要停止并重新启动它…@developer应该为您做这件事,当我使用函数调用循环时,它会起作用吗?我已经试过了,但是它引发了异常,在第一次调用后就停止了。你能告诉我你得到的异常吗?当我使用循环调用函数时,它会工作吗?我已经试过了,但是它引发了异常,在第一次呼叫后就停止了。你能告诉我你遇到的异常吗?