# asyncore.loop() with delayed function calls
import asyncore
-import time
import heapq
+import signal
+import time
tasks = []
+running = False
class Task(object):
def __init__(self, delay, func, args=[], kwargs={}):
return task
def loop(timeout=30.0):
- while True:
+ global running
+ running = True
+ oldhandler = signal.signal(signal.SIGTERM, exit)
+
+ while running:
now = time.time()
while tasks and tasks[0].time < now:
task = heapq.heappop(tasks)
t = max(min(t, tasks[0].time - now), 0)
asyncore.poll(timeout=t)
+
+ signal.signal(signal.SIGTERM, oldhandler)
+
+def exit(*args):
+ global running
+ running = False
+
+__all__ = ("schedule", "loop", "exit")