Таймер в Python на Windows - PullRequest
       0

Таймер в Python на Windows

0 голосов
/ 03 октября 2018

Если у меня есть функция, вызываемая много раз в цикле для , и эта функция иногда выполняется слишком много времени, как я могу использовать таймер для каждого вызова функции (для установки и сбросатаймер каждый раз)?

Похоже:

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)

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Существует еще один модуль с именем timeit, который может измерять время выполнения небольших фрагментов кода.Я верю, что вы также можете использовать это.Я никогда не использовал этот модуль, но он должен работать.

Вот ссылка на страницу документа.Дайте ему посмотреть: https://docs.python.org/2/library/timeit.html

см. Как использовать модуль timeit

0 голосов
/ 03 октября 2018

Для высокой возможности повторного использования и простоты реализации я бы рекомендовал -

  • Использование декораторов -

    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()
    
  • Использование профиля.пробег - https://docs.python.org/2/library/profile.html#module-profile

0 голосов
/ 03 октября 2018

Используйте модуль 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...