Предположим, я хочу перезапустить цикл обработки событий через интервал времени, например ниже:
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
Попробуй это:
import threading
def event_loop():
print("do_something")
some_flag=True
while some_flag:
timer = threading.Timer(2.0, event_loop)
timer.start()
Я нашел решение с созданием остановки потока:
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
.
.
.