Skip to content

Commit 8b79eed

Browse files
committed
added SyncScheduler
1 parent fde876b commit 8b79eed

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

src/durand/scheduler.py

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import Callable, Tuple, TypeVar, Dict, Any
55
import functools
66
import threading
7+
from sched import scheduler
78

89

910
TEntry = TypeVar("TEntry") # type of scheduler entry
@@ -25,12 +26,9 @@ def add(self, delay: float, callback, args=(), kwargs=None) -> TEntry:
2526
def cancel(self, entry: TEntry):
2627
"""Cancel a scheduled callback
2728
28-
:param entry: the scheduler entry to be canceld
29+
:param entry: the scheduler entry to be canceled
2930
"""
3031

31-
def start(self):
32-
"""Start scheduling"""
33-
3432
@abstractproperty
3533
def lock(self):
3634
"""A global lock which can be used the assure thread safety"""
@@ -57,6 +55,34 @@ def lock(self):
5755
return self._lock
5856

5957

58+
class SyncScheduler(AbstractScheduler):
59+
def __init__(self, lock: threading.Lock=None):
60+
if lock is None:
61+
lock = threading.Lock()
62+
self._lock = lock
63+
self._sched = scheduler()
64+
self._wake_up = threading.Event()
65+
66+
def add(self, delay: float, callback, args=(), kwargs=None) -> asyncio.TimerHandle:
67+
if kwargs == None:
68+
kwargs = {}
69+
self._wake_up.set()
70+
return self._sched.enter(delay, 0, callback, args, kwargs)
71+
72+
def cancel(self, entry):
73+
self._sched.cancel(entry)
74+
75+
def run(self):
76+
while True:
77+
self._sched.run()
78+
self._wake_up.wait()
79+
self._wake_up.clear()
80+
81+
@property
82+
def lock(self):
83+
return self._lock
84+
85+
6086
class VirtualScheduler(AbstractScheduler):
6187
@dataclass
6288
class Entry:

0 commit comments

Comments
 (0)