Используйте модуль 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)
В приведенном выше примере вызов timeout
в join
уничтожит поток через 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)