49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
|
#!/usr/bin/env python
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
|
|||
|
"""
|
|||
|
VWED.timer 模块 - 定时任务
|
|||
|
"""
|
|||
|
|
|||
|
from typing import Callable
|
|||
|
from ..script_registry_service import get_global_registry
|
|||
|
|
|||
|
|
|||
|
class VWEDTimerModule:
|
|||
|
"""VWED.timer 模块 - 定时任务"""
|
|||
|
|
|||
|
def __init__(self, script_id: str):
|
|||
|
self.script_id = script_id
|
|||
|
self.registry = get_global_registry()
|
|||
|
|
|||
|
def interval(self, seconds: int, handler: Callable, repeat: bool = True, delay: int = 0):
|
|||
|
"""注册定时任务
|
|||
|
分离式模式:
|
|||
|
VWED.timer.interval(
|
|||
|
seconds=60,
|
|||
|
handler=system_monitor
|
|||
|
)
|
|||
|
"""
|
|||
|
def decorator(func: Callable):
|
|||
|
timer_id = f"{self.script_id}_{func.__name__}_{id(func)}"
|
|||
|
self.registry.register_timer(
|
|||
|
timer_id=timer_id,
|
|||
|
interval=seconds,
|
|||
|
handler=func,
|
|||
|
script_id=self.script_id,
|
|||
|
repeat=repeat,
|
|||
|
delay=delay
|
|||
|
)
|
|||
|
return func
|
|||
|
|
|||
|
return decorator(handler)
|
|||
|
|
|||
|
def once(self, delay: int = 0, handler: Callable = None):
|
|||
|
"""注册一次性定时任务
|
|||
|
分离式模式:
|
|||
|
VWED.timer.once(
|
|||
|
delay=10,
|
|||
|
handler=initialization_task
|
|||
|
)
|
|||
|
"""
|
|||
|
return self.interval(0, handler=handler, repeat=False, delay=delay)
|