Как сбросить цикл на интервал времени в Python

1

Предположим, я хочу перезапустить цикл обработки событий через интервал времени, например ниже:

from time import sleep

def event_loop():
    print('Restart')
    while True: # Note :: This is an indefinite loop
        # Process some stuff.
        print("I'm a process")
        sleep(1)

magic_tool(interval_time=5, func=event_loop)

Ожидаемый результат:

Restart
I'm a process
I'm a process
I'm a process
I'm a process
I'm a process
Restart
I'm a process
I'm a process
I'm a process
I'm a process
I'm a process
Restart
I'm a process
.
.
.

Я читал о twisted, threading.Time apscheduler.scheduler и apscheduler.scheduler но я не мог этого сделать.

Я думаю, что я могу сделать это с помощью async.timeout.timeout() но я использую Python2.7

Теги:
python-2.7
event-loop

2 ответа

1

Попробуй это:

import threading 

def event_loop():
    print("do_something") 

some_flag=True
while some_flag:
    timer = threading.Timer(2.0, event_loop) 
    timer.start() 
  • 0
    мой цикл событий имеет бесконечный цикл
  • 0
    Итак, вы хотите, чтобы несколько экземпляров вашего цикла событий работали параллельно?
Показать ещё 1 комментарий
0

Я нашел решение с созданием остановки потока:

import threading
import time

class TimerClass(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.event = threading.Event()

    def run(self):
        print('Restart')
        while True and not self.event.is_set():
            print("I'm a process")
            self.event.wait(1)

    def stop(self):
        self.event.set()

try:
    while True:
        tmr = TimerClass()
        tmr.daemon = True
        tmr.start()
        time.sleep(5)
        tmr.stop()

except KeyboardInterrupt:
    pass

Ожидаемый результат:

Restart
I'm a process
I'm a process
I'm a process
I'm a process
I'm a process
I'm a process
Restart
I'm a process
I'm a process
I'm a process
I'm a process
I'm a process
I'm a process
Restart
I'm a process
I'm a process
.
.
.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню