在某些場(chǎng)景需要定時(shí)刷新對(duì)象的屬性盾致,如:為了使token不過(guò)期,需要定時(shí)刷新對(duì)象的token屬性
若使用遞歸調(diào)用养距,則可能會(huì)導(dǎo)致調(diào)用深度過(guò)深而自動(dòng)退出
- 使用 sched 模塊定時(shí)調(diào)度刷新函數(shù)
- 在
__init__()
函數(shù)中創(chuàng)建子進(jìn)程循環(huán)調(diào)用 - 在
__del__()
函數(shù)中停止子進(jìn)程,使子進(jìn)程的生命周期與類對(duì)象一致
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:
# 停止進(jìn)程
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) # 生成調(diào)度器
s.enter(2, 1, self.refresh, ())
s.run()
if __name__ == "__main__":
t = Test()
time.sleep(10)
del t
time.sleep(5)