Python - выполнить функцию после количества времени? - PullRequest
0 голосов
/ 05 января 2019

Что я пытаюсь сделать, это напечатать или выполнить определенную строку после определенное количество времени, в случае этой функции это 20 секунд, проблема во втором цикле, уверен, что он ждет 20 секунд в первом цикле, но второй цикл его больше не ждет, он просто продолжает печатать .. почему это происходит? и как я могу решить это?

from threading import Timer
import time

startlog = time.time()

def tess():



tm = 0
while True:
    tm += 1
    print(tm)
    tess()
    time.sleep(1)

Ответы [ 4 ]

0 голосов
/ 05 января 2019

Звучит так, будто вы пытаетесь запустить что-то в течение 20 секунд в фоновом режиме, а затем выполнить свою функцию.

Если это так, то многопоточность и многопроцессорность имеют больше смысла.

Используя этот декоратор , ваш код может быть переписан как

@time_limit(20)
def will_stop_after_20_secs():
    print ("doing stuff")
    time.sleep(20)


will_stop_after_20_secs()
print ("20 seconds had passed")
0 голосов
/ 05 января 2019

Вы должны изменить start = time.time() на startlog = time.time() и определить такую ​​переменную как global или nonlocal:

def tess():
    nonlocal startlog
    ...
        startlog = time.time()

Или просто подождите 20 секунд: time.sleep(20)

0 голосов
/ 05 января 2019

Вам необходимо обновить переменную startlog внутри цикла в функции tess (). Вам необходимо заменить

start = time.time()

с:

startlog = time.time() 
0 голосов
/ 05 января 2019

Вам нужно сбросить startlog между вызовами tess, которые «успешно» (прошли 20 с), этот код работает так, как вы хотите (но уродлив из-за глобальных переменных).

import time

startlog = time.time()

def tess():
    global startlog
    if time.time() - 20 > startlog:
        print('its been 20 secs')
        startlog = time.time()


tm = 0
while True:
    tm += 1
    print(tm)
    tess()
    time.sleep(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...