【Python--定时任务的四种方法】

news2025/1/24 5:00:17

定时任务

  • 前言
  • while True:+sleep()
    • 优点
    • 缺点
  • threading.Timer定时器
    • 多线程执行
    • 优点
    • 缺点
  • Timeloop库执行定时任务
  • 调度模块schedule
    • 优缺点

前言

当每隔一段时间就要执行一段程序,或者往复循环执行某一个任务,这就需要使用定时任务来执行程序。应用很广泛,可以实现程序的自动化,而不需要我们手动的在规定时间内执行。如爬虫,如定时器等等。以下将介绍几种pyhton常用的定时任务方法。

while True:+sleep()

import datetime
import time


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


def func():
    while True:
        task()
        time.sleep(5)


func()

结果演示

优点

执行简单,代码容易理解

缺点

只能实现同步任务,控制困难,而且sleep是个阻塞函数。应用面也小,只能设置间隔,而不能指定具体的时间点。

threading.Timer定时器

timer最就是定时器,可以启动多个定时任务,且是异步执行,所以不存在等待顺序执行问题。timer常用的几种方法:

方法说明
Timer(interval, function, args=None, kwargs=None)创建定时器
cancel()取消定时器
start()使用线程方式执行
join(self, timeout=None)等待线程执行结束
from datetime import datetime
from threading import Timer


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


def func():
    task()
    # 定义一个定时器
    # 注意timer的语法
    # Timer(interval, function, args=None, kwargs=None)
    t = Timer(3, func)
    t.start()


func()

在这里插入图片描述

多线程执行


from datetime import datetime
from threading import Timer
import threading
 
 
def task():
    now = datetime.now()
    ts = now.strftime("%Y-%m-%d %H:%M:%S")
    print(ts)
 
 
def func():
    task()
    t = Timer(3, func)
    t.start()
 
 
if __name__ == '__main__':
    for i in range(3):
        thread = threading.Thread(None, func)
        thread.start()

在这里插入图片描述

优点

可以实现异步任务,是非阻塞的。

缺点

但当运行次数过多时,会出现报错:Pyinstaller maximum recursion depth exceeded Error Resolution 达到最大递归深度,然后想到的是修改最大递归深度,但是运行到达到最大CPU时,python会直接销毁程序。

Timeloop库执行定时任务

Timeloop是一个库,可用于运行多周期任务。这是一个简单的库,使用decorator模式在线程中运行标记函数。

from datetime import datetime, timedelta
from timeloop import Timeloop
 
tl = Timeloop()
 
 
def task():
    now = datetime.now()
    ts = now.strftime("%Y-%m-%d %H:%M:%S")
    print(ts + '333!')
 
 
def task2():
    now = datetime.now()
    ts = now.strftime("%Y-%m-%d %H:%M:%S")
    print(ts + "555555!")
 
 
@tl.job(interval=timedelta(seconds=2))
def sample_job_every_2s():
    task()
 
 
@tl.job(interval=timedelta(seconds=5))
def sample_job_every_5s():
    task2()

调度模块schedule

schedule是一个第三方轻量级的任务调度模块,可以按照秒,分,小时,日期或者自定义事件执行时间。
如果想执行多个任务,也可以添加多个task。


import schedule
from datetime import datetime
 
 
def task():
    now = datetime.now()
    ts = now.strftime("%Y-%m-%d %H:%M:%S")
    print(ts)
 
 
def task2():
    now = datetime.now()
    ts = now.strftime("%Y-%m-%d %H:%M:%S")
    print(ts + '666!')
 
 
def func():
    # 清空任务
    schedule.clear()
    # 创建一个按3秒间隔执行任务
    schedule.every(3).seconds.do(task)
    # 创建一个按2秒间隔执行任务
    schedule.every(2).seconds.do(task2)
    while True:
        schedule.run_pending()
 
 
func()

优缺点

需要和while Ture配合使用,而且占用的CPU也比其他几种多的多,占用内存也是较大。

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

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

相关文章

【Unity项目实战】手把手教学:飞翔的小鸟(7)障碍对象池

承接上一篇:【Unity项目实战】手把手教学:飞翔的小鸟(6)添加障碍,我们已经生成了一个障碍物柱子,并且使得小鸟在越过柱子之后自动获得一分,接下来将继续讲解障碍物的随机生成。 一.脚本控制 障…

Centos7设置静态IP

Centos7设置静态IP及修改后不能联网问题解决方式 虚拟机外部配置1、打开Vmware选择虚拟网络编辑器菜单2、获取管理员权限,选择VMnet8,并点击还原默认设置,弹窗选择“是”。3、修改VMnet8的参数4、NAT设置5、确认虚拟机为NAT模式 虚拟机内部配…

数据流图(DFD)

目录 第十二章、数据流图(DFD)1、数据流图基本概念2、数据字典3、数据平衡原则4、数据流图试题解题技巧4.1、试题一4.2、试题二 第十二章、数据流图(DFD) 1、数据流图基本概念 数据流图是用于表示系统逻辑模型的一种工具。从数据…

【Swift】Swift和Objective-c混编

1.介绍 Swift和Objective-C都是苹果公司的编程语言,它们可以在同一个项目中同时使用。这种混编方式被称为“混合编程”(Mixed Programming)。 在混合编程时,我们需要用到一个桥接文件(Bridging Header)&a…

AfxMessageBox的两种用法

1 函数简介 函数声明如下: int AfxMessageBox(LPCTSTR lpszText,UINT nType MB_OK,UINT nIDHelp 0 ); int AFXAPI AfxMessageBox(UINT nIDPrompt,UINT nType MB_OK,UINT nIDHelp (UINT ) -1 );1.1 参数 lpszText 将显示在消息框的字符串。 nType 消息框…

使用Selenium模拟百度登录

前言 前面我已经安装好了Selenium并模拟成功了一下打开百度页面并进行查询,让我这个python初学者信心倍增,今天再来试一试百度登录 正文 把打开百度的代码放到构造方法中 ps:那个文件目录是用于后面滑块验证图片保存的。 def __init__(self):driver w…

Python实战基础8-列表

一、列表的基本使用 1.列表的格式 定义列的格式:[元素1,元素2,元素3,...,元素n] 变量tmp的类型为列表 tmp [XiaoChen,180,66.0] 列表中的元素可以是不同类型的 2.使用下标获取列表元素 namesList [XiaoChen,Xia…

上海AI lab提出VideoChat:可以与视频对话啦

夕小瑶科技说 原创 作者 | 小戏、ZenMoore 视频相比语言、图像,是更复杂更高级的一类表征世界的模态,而视频理解也同样是相比自然语言处理与计算机视觉的常见工作更复杂的一类工作。在当下大模型的洪流中,自然而然的想法就是大规模语言模型…

子矩形计数(多少个面积为k的全1子矩阵)【思维,两个一维数组相乘得到矩阵,计算一维数组中长度为x的全1子段】

3617. 子矩形计数&#xff08;多少个面积为k的全1子矩阵&#xff09; 输入样例1&#xff1a; 3 3 2 1 0 1 1 1 1输出样例1&#xff1a; 4输入样例2&#xff1a; 3 5 4 1 1 1 1 1 1 1 1输出样例2&#xff1a; 14#include <bits/stdc.h> using namespace std; #define …

Redisson锁的分析

文章目录 一、分布式锁概念1、实现思路2、出现死锁问题如何避免死锁问题 锁过期和释放当前不属于当前线程的锁解决不是加锁线程释放锁锁的过期时间如何解决 二、Redisson分布式锁Redis的部署方式对锁的影响集群模式Redlock实现高可靠的分布式锁 三、代码分析V1代码无锁V2代码单…

【C++从0到王者】第二站:类和对象(中)赋值运算符重载

文章目录 一、运算符重载1.运算符重载的使用2.运算符重载的注意事项 二、赋值运算符重载1.复制拷贝与拷贝构造2.赋值运算符重载的格式3.赋值运算符重载的实现4.赋值运算符重载的注意事项 一、运算符重载 1.运算符重载的使用 当我们实现一个日期类的时候&#xff0c;我们有时候…

Angular开发之——Angular打包部署项目(04)

一 概述 ng build 构建应用lite-server介绍及安装lite-server部署应用IIS管理器部署应用 二 ng build 构建应用 2.1 执行如下指令构建应用 ng build2.2 构建完成后&#xff0c;会创建一个 dist 文件夹 2.3 直接打开index.html会出错(需要借助于服务器部署) 三 lite-server介…

(二)PUN 2基本教程

一、介绍 PUN 基础教程是一个基于 Unity 的教程。我们将使用 Photon Cloud 开发第一个简单的 PUN 2 多人游戏。目标是同步每个玩家的动画角色、健康值和基本光线投射。 1.概述 本教程将从一个空项目开始&#xff0c;逐步指导您完成整个创建过程。在此过程中&#xff0c;将解释…

Halcon 形态学 开发案例 (开运算opening(先腐蚀再膨胀)、闭运算closing(先膨胀再腐蚀))

文章目录 1 形态学概念2 开运算 opening2.1 算子介绍2.2 开运算 开发案例3 闭运算 closing3.1 算子介绍3.2 闭运算 开发案例4 示例原图1 形态学概念 图像的形态学处理是对图像的局部像素进行处理,用于从图像中提取有意义的局部图像细节。 通过改变局部区域的像素形态,以对目…

数据结构与算法基础知识

线性结构篇 什么是数据结构与算法 回顾我们之前的C语言程序设计阶段&#xff0c;我们已经接触过基本数据类型&#xff0c;并且能够使用结构体对数据进行组织&#xff0c;我们可以很轻松地使用一个结构体来存放一个学生的完整数据&#xff0c;在数据结构学习阶段&#xff0c;我…

Linux篇1

Linux 1. 概述1.1 内容概要1.2 Linux发展1.3 Linux对比Windows 2. 虚拟机下安装CentOS系统2.1 下载安装VMware2.1.1 官网下载VMware软件2.1.2 安装VMware 2.2 下载CentOS镜像2.3 创建虚拟机&#xff08;在虚拟机中安装CentOS&#xff09;2.3.1 创建虚拟硬件环境2.3.2 安装CentO…

从匆匆的一瞥,到两小时泯灭(SQL注入)

从匆匆的一瞥&#xff0c;到两小时泯灭&#xff08;SQL注入&#xff09; 惊鸿一瞥用户名提示jsBase64.js文件手搓轮子&#xff08;python&#xff09;反复搓轮子&#xff08;python-tamper&#xff09; 惊鸿一瞥 昨天晚上分别开了我相识已久的女友&#xff0c;再度回到了单身狗…

暗月内网靶场渗透笔记

简介 靶场下载地址&#xff1a; 靶场地址&#xff1a; https://pan.baidu.com/s/12pSYxSU-ZmurQ9–GFiaXQ 提取码: 3p47虚拟机网络设置&#xff1a; 靶场拓扑图&#xff1a; 靶机账号密码&#xff1a; 信息收集 内网扫描 靶机就在本地&#xff0c;直接进行本地内网扫描即可…

朋友去华为面试,轻松拿到30K的Offer,羡慕了......

最近有朋友去华为面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…

OpenGL高级-几何着色器

几何着色器的介绍 在顶点和片段着色器之间有一个可选的着色器&#xff0c;叫做几何着色器(Geometry Shader)。几何着色器以一个或多个表示为一个单独基本图形&#xff08;primitive&#xff09;的顶点作为输入&#xff0c;比如可以是一个点或者三角形。几何着色器在将这些顶点发…