Позвольте Python держать оператор цикла в рабочем состоянии и проверять условие каждые 3 секунды - PullRequest
1 голос
/ 05 марта 2019

Я хочу, чтобы условный оператор цикла работал, но не всегда проверяю условия.

Например, если условие истинно, то в течение следующих 3 секунд будет выполняться условный оператор цикла, а затем проверяется условие после 3-й секунды, затем повторите этот процесс.

Я не хочу ждать или спать три секунды, я хочу, чтобы мой цикл работал три секунды. А затем проверьте, должно ли оно продолжаться еще три, как упомянуто @ RemcoGerlich

while if_active() == True:    #check the condition every 3 seconds` 
   try:               # it will keep running in 3 seconds if if_active() is true  
       with open(masterpath, 'r') as f:
            s = f.read()
        exec(s)

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Вот забавный и асинхронный способ.Просто для удовольствия, с демонстрацией для activate ing

import signal, os
import time

def handler(signum, frame):
    for i in range(3):
        print("foo bar")
        time.sleep(0.1)
    signal.alarm(3)

# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(3)

while True:
    try:
        active = not active
        if not active:
            signal.alarm(0)
        time.sleep(60)
    except KeyboardInterrupt as interrupt:
        # demonstrating activate, with ctrl+c
        signal.alarm(3)
0 голосов
/ 05 марта 2019

Вы можете отследить, когда в последний раз вы выполняли проверку, и только повторно выполнить проверку, если прошло три секунды.

from datetime import datetime, timedelta

INTERVAL = timedelta(minutes=3)
last_checked = datetime.now() - INTERVAL

while True:
    now = datetime.now()
    if last_checked <= (now - INTERVAL):
        if not if_active():
            break
        last_checked = now

    # do your thing here
    pass

Это может использовать некоторый рефакторинг, но идея должна работать.

0 голосов
/ 05 марта 2019

Вы можете использовать такую ​​команду, как sleep, чтобы избежать непрерывной работы.Вы можете увидеть более объясненный ответ в этой теме: Как я могу сделать задержку в Python?

...