Files
biliup/common/timer.py
T
2020-11-18 19:24:14 +08:00

43 lines
1.1 KiB
Python

import asyncio
import threading
class Timer(threading.Thread):
def __init__(self, func=None, args=(), kwargs=None, interval=15, daemon=True):
threading.Thread.__init__(self, daemon=daemon)
if kwargs is None:
kwargs = {}
self._args = args
self._kwargs = kwargs
self._flag = threading.Event()
self._func = func
self.interval = interval
self.task = None
self.asynchronous = False
async def astart(self):
self.asynchronous = True
self.task = asyncio.create_task(self.arun())
await self.task
async def arun(self):
while True:
await self.atimer()
await asyncio.sleep(self.interval)
async def atimer(self):
await self._func(*self._args, **self._kwargs)
def timer(self):
self._func(*self._args, **self._kwargs)
def run(self):
while not self._flag.is_set():
self.timer()
self._flag.wait(self.interval)
def stop(self):
if not self.asynchronous:
return self._flag.set()
self.task.cancel()