python定时任务_Python定时任务(上)

在项目中,我们可能遇到有定时任务的需求。其一:定时执行任务。例如每天早上 8 点定时推送早报。其二:每隔一个时间段就执行任务。比如:每隔一个小时提醒自己起来走动走动,避免长时间坐着。今天,我跟大家分享下 Python 定时任务的实现方法。

1

第一种办法是最简单又最暴力。那就是在一个死循环中,使用线程睡眠函数 sleep()。

from datetime import datetime

import time

'''每个 10 秒打印当前时间。'''

def timedTask():

while True:

print(datetime.now().strftime("%Y-%m-%d%H:%M:%S"))

time.sleep(10)

if __name__ == '__main__':

timedTask()

这种方法能够执行固定间隔时间的任务。如果timedTask()函数之后还有些操作,我们还使用死循环 + 阻塞线程。这会使得timedTask()一直占有 CPU 资源,导致后续操作无法执行。我建议谨重使用。

2

既然第一种方法暴力,那么有没有比较优雅地方法?答案是肯定的。Python 标准库 threading 中有个 Timer 类。它会新启动一个线程来执行定时任务,所以它是非阻塞函式。

如果你有使用多线程的话,需要关心线程安全问题。那么你可以选使用threading.Timer模块。

from datetime import datetime

from threading import Timer

import time

'''

每个 10 秒打印当前时间。

'''

def timedTask():

'''

第一个参数: 延迟多长时间执行任务(单位: 秒)

第二个参数: 要执行的任务, 即函数

第三个参数: 调用函数的参数(tuple)

'''

Timer(10, task, ()).start()

# 定时任务

def task():

print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

if __name__ == '__main__':

timedTask()

while True:

print(time.time())

time.sleep(5)

运行结果:

1512486945.1196375

1512486950.119873

2017-12-05 23:15:50

1512486955.133385

3

第三种方式是也是使用标准库中sched模块。sched 是事件调度器,它通过 scheduler 类来调度事件,从而达到定时执行任务的效果。

sched库使用起来也是非常简单。

1)首先构造一个sched.scheduler类

它接受两个参数:timefunc 和 delayfunc。timefunc 应该返回一个数字,代表当前时间,delayfunc 函数接受一个参数,用于暂停运行的时间单元。

一般使用默认参数就行,即传入这两个参数 time.time 和 time.sleep.当然,你也可以自己实现时间暂停的函数。

2)添加调度任务

scheduler 提供了两个添加调度任务的函数:enter(delay, priority, action, argument=(), kwargs={})

该函数可以延迟一定时间执行任务。delay 表示延迟多长时间执行任务,单位是秒。priority为优先级,越小优先级越大。两个任务指定相同的延迟时间,优先级大的任务会向被执行。action 即需要执行的函数,argument 和 kwargs 分别是函数的位置和关键字参数。scheduler.enterabs(time, priority, action, argument=(), kwargs={})

添加一项任务,但这个任务会在 time 这时刻执行。因此,time 是绝对时间.其他参数用法与 enter() 中的参数用法是一致。

3)把任务运行起来

调用 scheduler.run()函数就完事了。

下面是 sche 使用的简单示例:

from datetime import datetime

import sched

import time

'''

每个 10 秒打印当前时间。

'''

def timedTask():

# 初始化 sched 模块的 scheduler 类

scheduler = sched.scheduler(time.time, time.sleep)

# 增加调度任务

scheduler.enter(10, 1, task)

# 运行任务

scheduler.run()

# 定时任务

def task():

print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

if __name__ == '__main__':

timedTask()

值得注意的是: scheduler 中的每个调度任务只会工作一次,不会无限循环被调用。如果想重复执行同一任务, 需要重复添加调度任务即可。

推荐阅读:

本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享

【极客猴】每周坚持分享 Python 原创干货的公众号。包括基础入门,进阶技巧,网络爬虫,数据分析, Web 应用开发等,欢迎关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3-font

第三章 font-family控制文字字体font-family:Arial, Helvetica, sans-serif;依次采用列表中的字体,如果没有系统中没有安装,则采用浏览器默认字体。font-size控制文字大小1in(英寸) 2.54cm(厘米) 25.4 mm…

显示控制器注释_欧姆龙可编程控制器CS1D-CPU产品型号说明及功能介绍

欧姆龙可编程控制器CS1D-CPU用CPU单元 CPU单元(用于双CPU系统)欧姆龙可编程控制器CS1D-CPU用CPU单元 特点可以轻松引入、使用高可靠性系统成双配备CPU单元轻松易行CPU单元内的程序或内部数据在活动/备用CPU之间完全进行自动传送并进行同步。 无需选择要同步的数据或单独进行传送…

oracle查看数据库是否恢复成功_记一次解决docker下oracle数据库故障事例

一、问题背景:某个项目的线上环境oracle数据库挂了,同事急匆匆来找我救火。我简单咨询了一些基本情况:线上环境,docker部署,已正常运行半年。由于宿主机的根目录硬盘空间不够,运维的同事想把oracle数据文件…

[调剂复试]复试后的一点总结

来北京差不多有两天了,调剂的事情也有了结果,之前的忐忑的心也终于放了下来。好不容易有一点空闲的时间,所以想好好地总结一下,谈不上有多少经验,只是希望阅读这篇文章的人能够在迷茫的时候看到方向。 先说下调剂的学…

js取字符串后四位_JS逆向 | 某验滑块加密参数逆向分析

声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s抓包分析,看到一个加密参数w&…

谨防代理木马和怕米释放有毒程序

江民今日提醒您注意:在今天的病毒中Trojan/PSW.Agent.ann“代理木马”变种ann和TrojanDropper.Psyme.gke“怕米”变种gke值得关注。 英文名称:Trojan/PSW.Agent.ann中文名称:“代理木马”变种ann病毒长度:243200字节病毒类型&…

[python] 命令行模式下出现cp65001异常

问题 在命令行模式下有时会提示cp65001异常,很显然是命令行编码和python环境编码不匹配。 解决 切换命令行编码 unknown encoding: cp65001异常 python安装后进入命令行交互模式,输入任何代码都报unknown encoding: cp65001异常 需要将编码(UTF-8)修改…

挖掘城市ip_德国卡尔斯草莓农庄:旅游IP打造要创意更要形象!

什么是IP?名人圈:杨超越游戏圈:王者荣耀影视界:延禧攻略出版界:Harry Potter相声界:郭德纲……别忙着争先恐后,知道你的IP数不胜数~~你知道的IP数不胜数,一个人、一部作品、一个品牌、一座城市…

rust种的南瓜为什么老是消失_冷天早餐别将就,用南瓜和萝卜这样做,鲜香松软,营养好吃又管饱...

导语:11月我家爱吃这菜,加根萝卜简单一卷,有颜有料,孩子经常点名吃。冷天早餐别将就,用南瓜和萝卜这样做,鲜香松软,营养好吃又管饱“南瓜再大本地卖,辣椒再小穿省过”记得悦悦小时候…

windows下搭建python运行环境

今天python的环境炸了,刚好也重新做一下,记录下折腾的过程。 文件下载 首先打开官网,找到对应的文件的下载索引。 https://www.python.org/downloads/windows/ 其中3.7.0是版本号,a是代表稳定版本,b代表的是测试版本&…

python云计算开发技术_云计算开发学习笔记:Python3 面向对象技术简介

来源:TechWeb.com.cn Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解…

ORDER BY NEWID()【原创】

关于ORDER BY NEWID(),我是这么理解的:NEWID()是一个产生随即uniqueidentifier的函数,对于ORDER BY子句来说,如果后面接的是一个常量字符串,那么每次排序的顺序都是一样的,如果后面接的是变量,那…

如何 更换vue的图标_vue如何实现图标点击选中后换一个图标(只单选)

优惠券{{coupon}}{{nocoupon}}{{coupon_left1}}{{num}}{{coupon_left2}}{{coupon_right1}}{{coupon.price}}{{unitPrice}}{{available}}{{universalCoupon}}{{date}}{{application}}这是vue.js代码var content new Vue({el: ".app-web",data: {coupon: 优惠券,nocou…

HK-2000 数采仪系统说明之 5.H2000SService程序调用说明

HK-2000数据采集仪必须启动H2000SService服务(V2版本才有这个程序),启动命令./H2000SService 7002 该命令也可以添加到bject目录下的StartUp.sh脚本里./H2000SService 7002 > /dev/null &这样启动时会自动运行该服务gbDscMonitorES程序运行的计算机必须与HK…

[Beego] 内置的模板函数(不同格式的字符串和html的互转)

在使用beego框架的时候,常常需要把不同形式的字符串转化为html,有时候为了安全考虑会将html转义,而有时候希望能显示html标签。在存储到db中后,再取出来的显示是原本的,即html标签不会生效,这就需要一些内置…

python中isalpha的用法_python函数--isalpha()方法

原博文 2019-09-26 10:59 − isalpha()方法 描述:Python isalpha() 方法检测字符串是否只由字母组成。isalpha()方法语法:str.isalpha()参数:无。返回值:如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False…

stm32驱动ssd1306配置_STM32 OLED 屏幕 驱动芯片SSD1306 IIC代码

#include "oled.h"#include "stdlib.h"#include "oledfont.h"#include "delay.h"#include "usart.h"//SSD1306 OLED 驱动IC驱动代码//驱动方式:IIC//OLED的显存//存放格式如下.//[0]0 1 2 3 ... 127//[1]0 1 2 3 ... 127//[…

C#数据结构-单链表

理论基础: 链表是用一组任意的存储单元来存储线性表中的数据元素。 如果结点的引用域只存储该结点直接后继结点的存储地址,则该链表叫单链表(Singly Linked List)。 单链表由头引用H唯一确定。头引用指向单链表的第一个结点,也就是把单链表第…

[Golang] string类型和其他类型的值的互转

问题 由于在开发过程中遇到类型转换问题,比如在web中某个参数是以string存在的,这个时候需要转换成其他类型,这里官方的strconv包里有这几种转换方法。 实现 有两个函数可以实现类型的互转(以int转string为例) 1. For…

pandas 根据单号分类_由 “猫捉老鼠”游戏联想的用户分类问题

一、说在最前 用户识别,用户分类,精准营销…这是咱们业务人员常常念叨的话。底层逻辑为无论任何营销目的,在营销手段上,越针对某一细化群体,达成目的的概率也就会越大。那今天就来和大家说道说道用户识别/分类的一种方…