python 定时刷新对象属性

在某些场景需要定时刷新对象的属性,如:为了使token不过期,需要定时刷新对象的token属性
若使用递归调用,则可能会导致调用深度过深而自动退出

  1. 使用 sched 模块定时调度刷新函数
  2. __init__() 函数中创建子进程循环调用
  3. __del__() 函数中停止子进程,使子进程的生命周期与类对象一致
import datetime
import multiprocessing
import time
import sched

class Test():
    def __init__(self) -> None:
        self.data = 0
        self.p = multiprocessing.Process(target=self.loop, args=()) 
        self.p.daemon = True
        self.p.start()

    def __del__(self):
        try:
            # 停止进程
            self.p.terminate()
            self.p.join()
        except:
            pass

    def refresh(self):
        now = datetime.datetime.now()
        ts = now.strftime('%Y-%m-%d %H:%M:%S')
        self.data += 1
        print(f"{ts} update data: {self.data}")

    def loop(self):
        while True:
            s = sched.scheduler(time.time, time.sleep)  # 生成调度器
            s.enter(2, 1, self.refresh, ())
            s.run()

if __name__ == "__main__":
    t = Test()
    time.sleep(10)
    del t
    time.sleep(5)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容