python flask+apscheduler 定时任务导致数据重复和错误的解决办法

我们先看一下未定时前的代码,每一次执行数据都是准确的,是我们想要的结果

import datetime
class Num_total():def __init__(self):self.list1 = []self.list2 = []self.today = datetime.date.today().strftime('%Y-%m-%d')def get_time(self):print('系统当天时间:',self.today)def get_list(self):print('self.list1',self.list1)print('self.list2',self.list2)def main(self):for i in range(5):self.list1.append(i)self.list2.append(i+5)#获取生成的数据self.get_list()#获取当天时间self.get_time()
if __name__ == '__main__':num = Num_total()num.main()

输出结果正确,每次都是这几个结果

输出结果
>>> self.list1 [0,1,2,3,4]
>>> self.list2 [5,6,7,8,9]
>>> 系统当天时间: 2022-12-14

使用flask_apscheduler定时设置

#设置定时的参数
JOB = [
{#定时任务执行计划'id':'job1','func':Num_total().main(),#创建对象调用主函数'args':None,#入参'trigger':'cron',#设置定时执行'hour':'17','minute':'12'
}
]

设置定时,第一天是正常的,第二天往后就会出现数据叠加,日期固定的问题,导致如果两个数据列表写入文件时会出现重复和叠加问题。

具体问题有两个:

第一:设置定时的时候,发现每一天的日期都是设置定时的那一天,时间被固定了

第二:第二天起文件数据出现错乱叠加问题

网上查的解决原因与方案:

Flask的重新加载器将加载应用程序两次。因此flask总共有两个进程,重新加载器监视文件系统的更改并在不同的进程中启动真实应用程序,

解决办法:

禁用重新加载器。在启动flask程序的run语句中,将添加use_reloader=False参数即可禁用重新加载器
关闭调试模式。同样地,在启动flask程序的run语句中,将debug=True改为debug=False即可关闭debug模式,在部署后真实的运行场景中都会关闭调试模式。(来源:https://blog.csdn.net/qq_47527477/article/details/122904551)

但是问题未解决

原因是定时参数里面我们用的那个 func 参数

'func':Num_total().main(),#创建对象调用主函数

相当于我们传了一个固定的对象,因为定时任务相当于程序一直启动,每天定时执行一次,都是同一个对象,所以数据还是会叠加积累,所以我们要想办法每一次执行主函数,数据都会重置和清空就解决了

我的解决方案:

把可变的参数全部放在主函数里面,变成局部变量,不管你重复调用几次,每次都会重新清空或生成,就不会出现数据累积和固定不变的问题

下面是重复数据和日期固定的复现:发现只要同一对象重复调用主函数,就会出现数据重复和日期固定,定时参数里面填写的每次调用的对象就是我们定时时创建的一直没变

import datetime
class Num_total():def __init__(self):self.list1 = []self.list2 = []self.today = datetime.date.today().strftime('%Y-%m-%d')def get_time(self):print('系统当天时间:',self.today)def get_list(self):print('self.list1',self.list1)print('self.list2',self.list2)def main(self):for i in range(5):self.list1.append(i)self.list2.append(i+5)#获取生成的数据self.get_list()#获取当天时间self.get_time()
if __name__ == '__main__':num = Num_total()num.main()num.main()#同一对象继续调用导致数据重复与日期固定,定时时对象是固定的

输出结果错误出现重复和日期固定

>>> self.list1 [0, 1, 2, 3, 4]
>>> self.list2 [5, 6, 7, 8, 9]
>>> 系统当天时间: 2022-12-14
>>> self.list1 [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
>>> self.list2 [5, 6, 7, 8, 9, 5, 6, 7, 8, 9]
>>> 系统当天时间: 2022-12-14  #模拟定时的,如果程序一直运行,第二天同一个对象调用,日期是不会变化的

代码优化,可变参数全部变成函数内部局部变量,是每次调用都是最新的值

import datetime
class Num_total():def __init__(self):passdef get_time(self,today):print('系统当天时间:',today)def get_list(self,list1 ,list2):print('self.list1',list1)print('self.list2',list2)def main(self):list1 = []list2 = []today = datetime.date.today().strftime('%Y-%m-%d')for i in range(5):list1.append(i)list2.append(i+5)#获取生成的数据self.get_list(list1,list2)#获取当天时间self.get_time(today)
if __name__ == '__main__':num = Num_total()num.main()num.main()

结果正确

>>> self.list1 [0, 1, 2, 3, 4]
>>> self.list2 [5, 6, 7, 8, 9]
>>> 系统当天时间: 2022-12-14
>>> self.list1 [0, 1, 2, 3, 4]
>>> self.list2 [5, 6, 7, 8, 9]
>>> 系统当天时间: 2022-12-14  #同一天调用的,所以时间一致

日常总结,有错必纠。

python flask+apscheduler定时任务导致数据重复和错误相关推荐

  1. Flink Sql双流join-回撤机制导致数据重复

    数据源:kafka topic数据类型为json 业务场景:解析json,由于数据层级比较深,而且包含数组,此处键值可能为空 所以数据就变成了双流join,甚至是多流join. 问题原因:采用left ...

  2. 【Python】APScheduler定时任务

    APScheduler APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务 ...

  3. springboot 主键重复导致数据重复_Springboot实现防重复提交和防重复点击(附源码)...

    背景# 同一条数据被用户点击了多次,导致数据冗余,需要防止弱网络等环境下的重复点击 目标# 通过在指定的接口处添加注解,实现根据指定的接口参数来防重复点击 说明# 这里的重复点击是指在指定的时间段内多 ...

  4. [转载] JavaScrip ajaxt和python flask通过json传递数据的方法

    参考链接: python json 9: request向服务端发送json数据 JavaScript调用ajax发送一个json $('#cc').click(function () { mdffi ...

  5. springboot 主键重复导致数据重复_程序员:MySQL处理插入过程中主键或唯一键重复值的解决办法

    向MySQL插入数据有时会遇到主键重复的场景,原来的做法是先在程序代码中SELECT一下,判断是否存在指定主键或唯一键的数据,如果没有则插入,有的话则执行UPDATE操作,或另外一套逻辑,这种方法是不 ...

  6. 使用ajax完成python flask前端与后台数据的交互

    https://blog.csdn.net/omodao1/article/details/83049960

  7. python从文件中读取数据时出现错误_Python 从文件中读取数据

    读取整个文件 # 案例:读取整个文件 # pi_digits.txt 3.1415926535 8979323846 2643383279 # file_reader.py with open ('p ...

  8. python从文件中读取数据时出现错误_python-从文件中读取数据

    一.读取整个文件 learnFile.py 绝对路径 #coding=UTF-8 importsys reload(sys) with open(r'C:\Users\zhujiachun\Deskt ...

  9. 利用python flask框架搭建算法接口遇到的错误汇总

    1.404 post方式用(url="xxx",data="xxx") get方式用(url="xxx",params="xxx& ...

最新文章

  1. Windows服务器部分告一段落,开始转入Linux
  2. 公共无线网络多陷阱 ***称15分钟盗银行账号密码
  3. VTK:图片之ImageSeparableConvolution
  4. 如何修改 Chrome 默认的 font-size
  5. oracle blob字段索引,在oracle 数据库中使用 Blob 字段存储 一张图片并读取
  6. python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
  7. mysql命令导出表结构和数据_mysql-用命令导出、导入表结构或数据
  8. Spring Cloud Data Flow 2.0.1 GA 发布
  9. W3CSchool CHM API 帮助文档(全)
  10. Jmeter教程(图文版)
  11. Cuda驱动安装/更新
  12. 计算机操作员评分标准,计算机操作员EXCEL操作竞赛样卷与评分标准.doc
  13. 计算机分盘介质受写入保护,硬盘介质受写入保护怎么办
  14. 手动连接wifi失败分析
  15. Git Clone时报错解决方法
  16. Windows10系统自带的五笔输入法替换98字库
  17. ...可变形参的使用
  18. IBM大面积辞退40岁+的员工,如何避免可怕的中年危机?
  19. 简单方法保持屏幕常亮
  20. 吴军:厉害的人是这样为人处世的

热门文章

  1. 按键安卓非线程接入注册码系统
  2. 【锐捷无线】AP模式切换
  3. 中国剩余定理 扩展中国剩余定理
  4. Webix 控件自定义验证条件
  5. 学前端没这些工具怎么行
  6. GMap.net 自定义Marker
  7. Linux网络优化加速一键脚本
  8. java set get大写_javaBean命名规范 get / set 后的首字母大写
  9. 十问NB-IoT,最专业的NB知识。
  10. 新浪微博 QQ登录 登陆授权 V1.0