Python爬虫定时计划任务的几种常见方法(推荐)


Posted in Python onJanuary 15, 2021

记得以前的Windows任务定时是可以正常使用的,今天试了下,发现不能正常使用了,任务计划总是挂起。接下来记录下Python爬虫定时任务的几种解决方法。

1.方法一、while True

首先最容易的是while true死循环挂起,不废话,直接上代码:

import os 
import time 
import sys 
from datetime import datetime, timedelta 
def One_Plan(): 
  # 设置启动周期 
  Second_update_time = 24 * 60 * 60 
 # 当前时间 
 now_Time = datetime.now() 
 # 设置 任务启动时间 
 plan_Time = now_Time.replace(hour=9, minute=0, second=0, microsecond=0) 
 # 设置差值,-1 day, 21:48:53.246576,类似于这样 
 # time.sleep()需要传入int,所以下面使用.total_seconds() 
 # 主要用来计算差值,返回int,具体功能可以自行查阅相关资料 
 delta = plan_Time - now_Time 
 first_plan_Time = delta.total_seconds() % Second_update_time 
 print("距离第一次执行需要睡眠%d秒" % first_plan_Time) 
 return first_plan_Time 
# while Ture代码块,挂起程序,睡眠时间结束后调用函数名进行执行 
while True: 
 s1 = One_Plan() 
 time.sleep(s1) 
 # 下面这里是自己定义的函数,想跑代码的可以换成hellow world函数或者注释掉这行测试下 
 exe_file(D_list) 
 print("正在执行首次更新程序")

个人感觉使用这种方式进行定时计划的启动如果为单个程序,并且一天执行一次的话没什么问题,如果要考虑到一天执行多个任务并且一天需要执行多次,短板一下就凸显出来了。

在工作的情况中还需要考虑到很多因素,比如爬虫程序需要在晚上12点和早上6点、9点,下午3点执行四次,并且需要同时执行4个爬虫,还需要考虑到网络是否稳定,如果程序挂掉该怎么处理等等因素。

2.方法二、Timer模块

之前说了最简单的定时启动,可以说是最简单粗暴的,人生苦短,python优雅,有没有那种很简单很简单,几行代码就可以搞定的那种?必须有的哈!简单举个例子说一下,上一个方法的末尾提到过需要考虑到其他因素,这就来了:

现在需要启动一个selenium的爬虫,使用火狐驱动+多线程,大家都明白的,现在电脑管家显示CPU占用率20%,启动selenium后不停的开启浏览器+多线程,好,没过5分钟,CPU占用率直接拉到90%+,电脑卡到飞起,定时程序虽然还在运行,但是已经类似于待机状态,是不是突然感觉到面对电脑卡死,第一反应:卧槽,这个lj电脑,怎么程序都跑不起来,我还写这么多代码,*****!!

是吧,接下来上代码,具体功能,请自行查阅相关资料深造:

from datetime import datetime 
from threading import Timer 
import time 
# 定时任务 
def task(): 
 print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) 
def timedTask(): 
 ''' 
 第一个参数: 延迟多长时间执行任务(秒) 
 第二个参数: 要执行的函数 
 第三个参数: 调用函数的参数(tuple) 
 ''' 
 Timer(5, task, ()).start() 
while True: 
 timedTask() 
 time.sleep(5)

7行代码,是不是很优雅?优不优雅的主要是代码少,不费劲对吧。

2020-06-05 14:06:39 
2020-06-05 14:06:44 
2020-06-05 14:06:49 
2020-06-05 14:06:54 
2020-06-05 14:06:59 
2020-06-05 14:07:04 
2020-06-05 14:07:09 
2020-06-05 14:07:14 
2020-06-05 14:07:19 
2020-06-05 14:07:24

3. 方法三、sched模块

这次直接上模块——sched模块

代码如下:

from datetime import datetime 
import sched 
import time 
def timedTask(): 
 # 初始化 sched 模块的 scheduler 类,传入(time.time, time.sleep)这两个参数 
 schedscheduler = sched.scheduler(time.time, time.sleep) 
 # 增加调度任务,enter(睡眠时间,执行级别,执行函数) 
 scheduler.enter(5, 1, task) 
 # 运行任务 
 scheduler.run() 
# 定时任务 
def task(): 
 print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) 
if __name__ == '__main__': 
 timedTask()

这个模块也很容易上手,需要注意,scheduler()只会执行一次就结束程序,可以在mian下面添加while Ture或者直接添加调度任务在timeTask中就可以,另外除了这样的写法外,还有另外一种写法,上代码:

import schedule 
import time 
def hellow(): 
 print('hellow') 
def Timer(): 
 schedule.every().day.at("09:00").do(hellow) 
 schedule.every().day.at("18:00").do(hellow) 
 while True: 
  schedule.run_pending() 
  time.sleep('需要睡眠的周期') 
Timer()

Python爬虫定时计划任务的几种常见方法(推荐)

在这里可以看到,有day-hour-minute,定时任务非常的方便,在while True里添加需要睡眠的时间,在函数模块内添加需要执行的次数即可。

到此这篇关于Python爬虫定时计划任务的几种常见方法的文章就介绍到这了,更多相关Python爬虫定时计划任务内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用python加密自己的密码
Aug 04 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
Python标准库之collections包的使用教程
Apr 27 Python
Python中进程和线程的区别详解
Oct 29 Python
django中ORM模型常用的字段的使用方法
Mar 05 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
python设置环境变量的原因和方法
Jun 24 Python
TensorFlow实现简单的CNN的方法
Jul 18 Python
python中sort和sorted排序的实例方法
Aug 26 Python
python将时分秒转换成秒的实例
Dec 07 Python
python 实现屏幕录制示例
Dec 23 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
Jan 15 #Python
pandas针对excel处理的实现
Jan 15 #Python
详解Python中的文件操作
Jan 14 #Python
python中的时区问题
Jan 14 #Python
Python截图并保存的具体实例
Jan 14 #Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 #Python
DRF使用simple JWT身份验证的实现
Jan 14 #Python
You might like
实现树状结构的两种方法
2006/10/09 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
golang与PHP输出excel示例
2016/07/22 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
跨浏览器的事件对象介绍
2012/06/27 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
懒加载实现的分页&&网站footer自适应
2016/12/21 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
python实现从字典中删除元素的方法
2015/05/04 Python
Python语法快速入门指南
2015/10/12 Python
python开发之文件操作用法实例
2015/11/13 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
python程序如何进行保存
2020/07/03 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
面试后感谢信
2014/02/01 职场文书
父母寄语大全
2014/04/12 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB