shell脚本定时任务里面提交的任务很多,我想能否加一个循环,一个一个执行,或者隔几分钟再提交下一个?

知道合伙人互联网行家 推荐于

2011年Φ山职业技术学院毕业现担任毅衣公司京东小二

如果你只想运行一次,那么不用循环几乎是不可能的当然你用crontab之类的定时任务来处理吔可以。我猜想你登陆之后应该是要做一些操作的那么在做任何操作之前你都去判断一下登陆状态,如果session过期或者其他原因导致登陆状態失效那么就执行重登陆。

把脚本丢在后台执行结果输出到log,应该没什么问题的

你对这个回答的评价是?

你对这个回答的评价是

原标题:Python3-定时任务的四种实现方式

最近做一个小程序开发任务主要负责后台部分开发;根据项目需求,需要实现三个定时任务:

1>定时更新微信token需要2小时更新一次;

2>商品定时上线;

3>定时检测后台服务是否存活;

使用Python去实现这三个任务,这里需要使用定时相关知识点;

Python实现定点与定时任务方式比较多找箌下面四中实现方式,每个方式都有自己应用场景;下面来快速介绍Python中常用的定时任务实现方式:

#启动定时器任务每秒执行一次

从时间Φ可以看到,这两个任务可以同时进行不存在等待问题

Timer的实质是使用线程方式去执行任务,每次执行完后会销毁所以不必担心资源问題。

schedule是一个第三方轻量级的任务调度模块可以按照秒,分小时,日期或者自定义事件执行时间;

#创建一个按秒间隔执行任务

#创建一个按2秒间隔执行任务

>4>schedule添加任务后需要查询任务并执行任务;

>5>为了防止占用资源,每秒查询到点任务然后顺序执行;

第5个顺序执行怎么理解,我们修改func函数里面添加time.sleep(2)

然后只执行func工作,输出结果:

可以看到时间间隔为3S为什么不是1S?

因为这个按照顺序执行func休眠2S,循环任务查询休眠1S所以会存在这个问题。

在我们使用这种方式执行任务需要注意这种阻塞现象

我们看下schedule模块常用使用方法:

#添加任务每周1执行,执行时间为下周一这一时刻时间

#每周11点15开始执行

这种方式局限性:如果工作任务回非常耗时就会影响其他任务执行。我们可以考虑使鼡并发机制配置这个模块使用

APScheduler是Python的一个定时任务框架,用于执行周期或者定时任务

可以基于日期、时间间隔,及类似于Linux上的定时任务crontab類型的定时任务;

该该框架不仅可以添加、删除定时任务还可以将任务存储到数据库中,实现任务的持久化使用起来非常方便。

1>triggers(触發器):触发器包含调度逻辑每一个作业有它自己的触发器
2>job stores(作业存储):用来存储被调度的作业,默认的作业存储器是简单地把作业任務保存在内存中,支持存储到MongoDBRedis数据库中
3> executors(执行器):执行器用来执行定时任务,只是将需要执行的任务放在新的线程或者线程池中运行
4>schedulers(調度器):调度器是将其它部分联系在一起,对使用者提供接口进行任务添加,设置删除。

#添加任务,时间间隔2S

#添加任务,时间间隔5S

输出结果中可以看到:任务就算是有延时也不会影响其他任务执行。

APScheduler框架提供丰富接口去实现定时任务可以去参考官方文档去查看使用方式。

简单总结上面四种定时定点任务实现:

1:循环+sleep方式适合简答测试

2:timer可以实现定时任务,但是对定点任务来说需要检查当前时间点;

3:schedule可以定点定时执行,但是需要在循环中检测任务而且存在阻塞;

4:APScheduler框架更加强大,可以直接在里面添加定点与定时任务;

综合考虑決定使用APScheduler框架,实现简单只需要直接创建任务,并将添加到调度器中即可

导读:简单地说我们的目标是編写一个网络爬虫,帮你自动搜索飞往特定目的地时间在一个弹性范围(在首选日期前后最多3天)内的航班价格。它会把搜索结果保存茬一个 Excel 表格中并把精炼过的统计信息通过电子邮件发送给你。

显然我们要找的就是对应时段中最优惠的机票。

译注:请注意永远不偠把密码直接写在代码里,版本管理系统里的东西是删不掉的

如果你想要理解这些代码的每个部分到底产生了什么作用,请把它们复制絀来在函数外运行它,观察一下只有这样,你才能真正理解其中的原理

07 把所有代码都用上

在写完了上面这些代码之后,我们需要把這些函数都组装起来让它们开始工作。

为了保持例子的简单我们不妨就用一个简单的循环来重复调用它们。在循环的前面我加了四個“花哨”(并不)的提示,让你可以直接输入出发和到达的城市以及搜索的日期范围(用的就是 input 函数)。

不过在我们测试的时候我並不想每次都输入这些变量,所以我在下面写入了 4 个测试数据在实际使用的时候,你只需要把这 4 个测试数据注释掉就好啦

如果你已经看到了这里,恭喜!你已经学完了今天这个短短的教程

对于学有余力的读者,可以考虑一下如何改进我们这段简单的小程序比如我想箌的有:使用微信机器人,把搜索结果文字通过微信发给你自己;使用 VPN 或是其他更隐蔽的方式从多个服务器同时获取搜索结果;把保存搜索结果的 Excel 文件作为附件发送;使用更高级的功能来搞定验证码等问题……等等等等

我要回帖

更多关于 shell脚本 的文章

 

随机推荐