simple scheduler to be called from daemon processes or similar
This commit is contained in:
parent
f8db937643
commit
955f4ad88c
22
schedule.py
22
schedule.py
@ -4,19 +4,23 @@ from typing import Callable, List, Any
|
||||
|
||||
class Scheduler:
|
||||
def __init__(self):
|
||||
self.jobs = []
|
||||
self.jobs = {}
|
||||
|
||||
def schedule(self, timedelta: datetime.timedelta, func: Callable, *args: List[Any]):
|
||||
self.jobs.append({
|
||||
'func': func,
|
||||
def schedule(self, name: str, every: datetime.timedelta, func: Callable[..., None], *args: List[Any]):
|
||||
self.jobs[name] = {
|
||||
'call': func,
|
||||
'args': args,
|
||||
'timedelta': timedelta,
|
||||
'runat': (datetime.datetime.utcnow() + timedelta)
|
||||
})
|
||||
'timedelta': every,
|
||||
'runat': (datetime.datetime.utcnow() + every)
|
||||
}
|
||||
|
||||
def unschedule(self, name: str):
|
||||
if name in self.jobs:
|
||||
del self.jobs[name]
|
||||
|
||||
def run_pending(self):
|
||||
now = datetime.datetime.utcnow()
|
||||
for job in self.jobs:
|
||||
for _, job in self.jobs:
|
||||
if job['runat'] <= now:
|
||||
job['runat'] += job['timedelta']
|
||||
job['func'](*job['args'])
|
||||
job['call'](*job['args'])
|
||||
|
||||
Loading…
Reference in New Issue
Block a user