监视器函数result的decorator,在结果更改时运行回调

diff-trigger的Python项目详细描述


变更触发器

应用场景

周期性的执行某个任务, 将任务的结果存储于磁盘中。 当每次检测到结果和上次不同时, 更新外部存储的结果并触发回调任务

安装

pip install diff_trigger

使用

举个栗子

fromdiff_triggerimportwatchdiffimportrequestsimportloggingdeftrigger(old,new):logging.info('data change from {} to {}'.format(old,new))@watchdiff(dbpath='/var/cache/pythonjob',callback=trigger,key='somekey')defjob(url):r=requests.get(url)returnr.contentclassSomeClass:@watchdiff(dbpath='/var/cache/pythonjob',callback=trigger)defjob(self,url):r=requests.get(url)returnr.content

说明

  • 定义一个有两个参数的回调函数,第一个参数会被传递为旧的结果,第二个参数会被传递为新的结果。根据实际情况使用这个数据
  • 使用watchdiff作为装饰器,填入本地的数据地址,以及所要指定的触发函数名。可以手工指定一个键,函数结果会存放在这个键下面。如果不指定键名,会根据函数的调用参数来生成一个键
  • 在类中使用时,整个函数的签名计算会有整个实例的序列化信息, 因此尽量不要在体积较大的类中使用。或者使用staticmethod
  • 如果在类中作为装饰器使用,需要注意的是实例的改变会更改本地数据库中的键值,导致无法触发回调函数。只有在实例不变的情况下才会有效。或者使用staticmethod

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java Square类   java Android RecyclerView内部视图寻呼机   java类变量:公共访问只读,但私有访问r/w   java不兼容ClassChangeError java8   安卓java on on参数,如参数iNIT.C++C++   java如何在下面的代码中根据我的喜好设置JTextArea和JTextField的大小?   java使用CustomAdapter更改ListView的显示方式   jakarta ee什么是Java Servlet?   传递给Javasocket程序的参数   java为什么我的计划任务在这两者之间有很长的延迟   Java“迭代器”关键字   java获取数据库SQLite Android中插入行的行ID   网络如何在Java应用程序中设置H2嵌入式数据库,以便在小型网络中使用?   数组Java:写出所有包含K1的Nbit序列   java返回随机字符串键的整数值   在java中解析到日期的字符串时保留时区   java如何修复“运行配置错误:[在SDK中找不到Rails]”?   Java包装器OutofMemory