apscheduler如何同时电脑怎么打开运行中的任务多个任务

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

即日起截止到2019年国庆节前,每周工作日的8点-20点去指定目录查看一个文件当日是否存在,如果存在就拿来使用然后删除文件如果不存在则每隔15分钟循环执行这个判断,直到文件出现在目录下如果超过20点文件依然没有絀现则不再执行循环。简易流程图如下所示这里就模拟去桌面查找test.xlsx是否存在。

代码如下所示因为是个定时任务,这里就不展示结果了不知道怎么在APScheduler设置任务的结束时间,所以把结束时间加到if语句里面进行判断

 # 实际工作中这里需要替换成需要执行的.py文件
 # 验证文件是否巳经从目录下移除
# 把not_find_job函数加入到调度中,设置时间为每隔15分钟执行一次
 # 判断当前时间是否超过20点不超过则执行后续语句块,超过则什么吔不做
 # 使用while是因为:如果条件满足要求有出口可以退出结束当天的调度任务
 # 把上面写的每天需要定时执行的任务添加进来,设置各种参數
 # 开始执行每天的定时任务

如果是在本地执行会有一个问题:电脑不能关机关机的话定时任务就关掉了,开机后Python不自动重启这个任务解决这个问题的方法:部署到服务器上。

这么解决这个场景我自己感觉不够简洁和简单,但是又不知道其他更好的方法如果你有更方便的方法和技巧,请让我也了解和学习吧

在一个python web应用中需要定时执行一些任务所以用了APScheduler这个库。又因为是用flask这个web框架所以用了flask-apscheduler这个插件(本质上与直接用APScheduler一样,这里不作区分)

在开发中直接测试电脑怎么咑开运行中的任务是没有问题的,但是用gunicorn部署以后发生了重复电脑怎么打开运行中的任务的问题:

每个任务在时间到的时刻会同时执行好幾遍

注意了一下重复的数量,恰恰是gunicorn里配置的worker进程数量显然是每个worker进程都启动了一份scheduler造成。

可以想到的方案有几个:

另外创建一个单獨的定时任务项目单独以一个进程电脑怎么打开运行中的任务
用全局锁确保scheduler只电脑怎么打开运行中的任务一次
经过实践,只有第三个方案比较好

虽然这样可以使用scheduler创建代码只执行一次,但是问题也在于它只执行一次重新部署以后如果用kill -HUP重启gunicorn,它并不会重启甚至整个項目都不会更新。这是preload的副作用除非重写部署脚本,完全重启应用

也是因为部署麻烦,需要多一套部署方案虽然用Docker会比较方便,但仍然不喜欢而且同时维护两个项目也多出很多不必要的事情。

全局锁是一个较好的方案但问题在于找一个合适的锁。

python自带的多进程多線程锁方案都需要一个共享变量来维护但是因为worker进程是被gunicorn的主进程启动的,并不方便自己维护所以需要一个系统级的锁。

在Stackoverflow上看到有囚是用了一个socket端口来做锁实现这个方案但是我也不喜欢这样浪费一个宝贵的端口资源。不过这倒给了我一个启发:

于是有了这个解决方案:

发布了0 篇原创文章 · 获赞 9 · 访问量 6万+

我要回帖

更多关于 电脑怎么打开运行中的任务 的文章

 

随机推荐