Skip to content
Snippets Groups Projects
Select Git revision
  • a72f36f5798c79283afdb1ab3da01f067d799096
  • master default protected
  • th/mailman3
  • opendkim
  • dkim
5 results

master.cf

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    scheduler.py 1.06 KiB
    from server import *
    import threading
    import sched
    from time import sleep
    
    scheduler = sched.scheduler()
    def run_scheduler():
    	sleep(1) # UWSGI does weird things on startup
    	while True:
    		scheduler.run()
    		sleep(10)
    
    def sched_func(delay, priority=0, firstdelay=None, args=[], kargs={}):
    	if firstdelay == None:
    		firstdelay = random.randint(1, 120)
    	def wrapper(func):
    		def sched_wrapper():
    			with app.test_request_context():
    				try:
    					if config.get('DEBUG', False):
    						print("Scheduler: started {} (frequency 1/{}s)".format(func.__name__, delay))
    					func(*args, **kargs)
    				except Exception:
    					traceback.print_exc()
    					notify_admins('scheduler_exception', name=func.__name__,
    							traceback=traceback.format_exc())
    			scheduler.enter(delay, priority, sched_wrapper)
    		scheduler.enter(firstdelay, priority, sched_wrapper)
    		print("Scheduler: registered {} (frequency 1/{}s, start delay: {}s)".format(func.__name__, delay, firstdelay))
    		return func
    	return wrapper
    if not app.config['DISABLE_SCHEDULER']:
    	threading.Thread(target=run_scheduler, daemon=True).start()