广州萝岗网站建设,东营建设有限公司,上海展台搭建,腾讯云 wordpress博客废话不看#xff1a; 最近写了一个小项目#xff0c;基本逻辑是通过定时任务轮询 API#xff0c;检测 API 状态变化并执行对应的操作。该 API 一共有 3 种状态#xff0c;假设每种状态的值分别为 1、2、3#xff0c;在状态 2 的时候需要调用一次处理方法。 这里的问题是状…废话不看 最近写了一个小项目基本逻辑是通过定时任务轮询 API检测 API 状态变化并执行对应的操作。该 API 一共有 3 种状态假设每种状态的值分别为 1、2、3在状态 2 的时候需要调用一次处理方法。 这里的问题是状态 2 可能持续很长时间而通过定时任务调用的 Python 脚本默认是没有记录状态的因此需要本地保存状态。可以用 SQLite 或者 MangoDB但是用到这种小项目上有点多余的感觉最轻量级的解决方法大概还是用 json 保存。
实现
取 dict 的时候如果 key 不在 dict 中会抛出异常先重写 __getitem__ 避免 key 不在 dict 中时的报错然后在 __setitem__ 的时候将 dict 写入到本地这样就完成了数据的无感写入。
class ReactiveDict(dict):def __getitem__(self, __key: any) - any:if __key not in self:self[__key] ReactiveDict()return self[__key]return super().__getitem__(__key)def __setitem__(self, __key: any, __value: any) - None:data super().__setitem__(__key, __value)with open(rootpath, w, encodingutf-8) as f:json.dump(reactive_dict, f)return datareactive_dict ReactiveDict()
reactive_dict[user][profile][name] abc当然这样写的一个问题是可能会导致非常频繁的 I/O 操作后续可以优化成类似 JavaScript 的防抖使只有最后一次 set 写入到本地。
突然想到用 json.loads 可以直接将 JSON字符串转为 dict用来初始化嵌套较深的对象时可能有用。