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

Irene181 等级 1190 0 0

记得以前的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)这两个参数  
    scheduler = 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里添加需要睡眠的时间,在函数模块内添加需要执行的次数即可。

**-----**------**-----**---**** End **-----**--------**-----**-****

往期精彩文章推荐:

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

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/Qjc6RZP78boUg4gtK0OAxg,如有侵权,请联系删除。

收藏
评论区

相关推荐

原来Python绘图也可以这么漂亮,这次真的是学习到了!
(https://imghelloworld.osscnbeijing.aliyuncs.com/8830803f033eeed85783e9058cf08968.png) 作者:朱小五 来源:快学Python 👆人生苦短,快学Python! 最近看了一篇文章《一个牛逼的Python 可视化库:PyG2Plot》,可惜只是简单介
5 行 Python 代码调用电脑摄像头
**前提:** 确保 python 中安装了 opencv-python 模块。如果没有安装,可以参考:[https://pypi.org/project/opencv-python/](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fpypi.org%2Fproject%2Fopencv
UI自动化的第一步(Python,pip,selenium,PyCharm安装配置)
### 一,py安装 1.python下载,安装,环境配置 地址:[https://www.runoob.com/python/python-install.html](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.runoob.com%2Fpython%2Fpython-in
VSCode 配置 Python 开发环境
### 一、环境准备 首先需要先安装好 Python 和 VSCode, 下载地址如下 * [VSCode](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fcode.visualstudio.com%2F) * [Python](https://www.oschina.net/
PEP 333
> > 翻译自 Python Web Server Gateway Interface v1.0 [PEP 333 - Python Web Server Gateway Interface v1.0](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.python.org%2F
CentOS升级Python到2.7版本
查看python的版本 python -V Python 2.4.3 1.先安装GCC yum -y install gcc 2.下载Python-2.7.2 wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2 3.解压Python-2.7.2
FreeBSD python安装MySQL
fetch https://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.4.zip unzip MySQL-python-1.2.4.zip cd MySQL-python-1.2.4 python setup.py install ln -s /usr/loca
Jenkins Python Plugin获取环境变量
Jenkins Python Plugin 官方wiki:[https://wiki.jenkins-ci.org/display/JENKINS/Python+Plugin](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwiki.jenkins-ci.org%2Fdisplay%2F
Linux下Python编程
linux下python编程可以使用sublime-text3来作为编辑器,很方便,而且linux默认就是有python2和python3环境安装的,我们只要安装sublime-text3即可进行python编程 sudo update-alternatives --install /usr/bin/python python /usr/bin/p
Mac 升级Python 2.7 到 Python 3.7
MAC上默认内置安装了Python 2.7,但是Python 2.7到2020年就会停止维护了,并且有时候会出现依赖库的不兼容问题,那么怎么安装Python 3.X,并且将Python 3.X的版本设置为默认版本呢? ### 安装Python 3.7 有两种安装方式。 第一种是直接下载python3安装包安装: 1、下载地址如下:[https://w
Python 3 教程
Python 3 教程 =========== ![python3](https://www.runoob.com/wp-content/uploads/2014/05/python3.png) Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,
Python 随笔
Python的windows包:[http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.lfd.uci.edu%2F%7Egohlke%2Fpythonlibs%2F%23mys
Python中Requests库的高级用法
前面讲了Python的urllib库的使用和方法,Python网络数据采集Urllib库的基本使用 ,Python的urllib高级用法 。 今天我们来学习下Python中Requests库的用法。([官方手册](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdocs.python-req
Python进阶丨如何创建你的第一个Python元类?
> **摘要:**通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。 Python元类设置类的行为和规则。元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一。通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。本文介绍以下概念: * * 什么是Python元类?
supervisor 监控redis & mongodb
安装 == 1. 安装python `brew install python` 2. 安装pip `wget https://bootstrap.pypa.io/get-pip.py` `sudo python get-pip.py` 3. 安装supervisor `pip ins