python的定时任务(线程)

解决Python中定时任务线程无法自动退出的问题 今天小编就为大家分享一篇解决Python中定时任务线程无法自动退出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子线程。 from threading import Timer... 阅读详情

背景

当我们在写业务逻辑时,常常会用到一些定时触发的任务,比如定时清理、定时补偿、定时报警、定时同步、定时发送等等等。这些任务一般是轻量级的,因此使用一个线程去处理即可。

介绍两种实现方式,方式一是使用python内建模块sched,方式二是使用第三方模块schedule。

 

内建sched模块

sched模块实现了一个通用事件调度器,在调度器类使用一个延迟函数等待特定的时间,执行指定的任务(函数)。同时支持多线程应用程序,在每个任务执行后会立刻调用延时函数,以确保其他线程也能执行。

step1:生成调度器

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

 

step2:自定义任务

def task_function():
    #=========================
    # TODO: 你的业务逻辑代码
    #=========================

    scheduler_handler.enter(timer_interval, 0, task_function, (arg,))

timer_interval:定时任务的触发的时间间隔

 

step3:注册任务

scheduler_handler.enter(delay_seconds, 0, task_function, (arg,))

enter()方法,包含4个参数:

  • 触发任务的延迟时间(单位为秒),如果为0,当执行run()方法后会立即执行。

  • 优先级(多个事件在同一时间触发的情况下,优先级高的优先执行)

  • 任务函数

  • 任务函数的传入参数

step4:开启调度器

scheduler_handler.run()

调用run()方法后,调度器开始计时,到达指定时间后会执行对应的事件。每个事件都在同一线程中运行,所以如果一个事件需要更长的时间,延迟事件将会有重叠。为了防止丢失事件,延迟事件将会在之前事件运行完再被执行,但一些延迟事件可能会晚于原本计划的事件。

 

第三方模块schedule

step1:自定义任务

def task_function():
    #=========================
    # TODO: 你的业务逻辑代码
    #=========================

 

step2:注册任务

# 每隔10分钟触发一次任务
schedule.every(10).minutes.do(task_function, arg)
# 每隔一小时触发一次任务(every函数无入参时使用默认参数:1)
schedule.every().hour.do(task_function, arg)
# 每天的10:30触发一次任务
schedule.every().day.at("23:30").do(task_function, arg)
# 每隔3到7天触发一次任务 
schedule.every(3).to(7).days.do(task_function, arg)
# 每周一的这个时间点触发一次任务
schedule.every().monday.do(task_function, arg)
# 每周六的20:00触发一次任务
schedule.every().saturday.at("20:00").do(task_function, arg)

 

step3:开启调度器

while True:
    schedule.run_pending()
    time.sleep(seconds) # 此处的睡眠时间很关键

run_pending()方法每执行一次,调度器会检查一次任务是否到达指定时间,已经到达时间的任务就会触发。因此需要循环调用run_pending()。循环中的睡眠时间决定了调度器的检查时间间隔,因此当任务精度为秒时,睡眠时间建议为1秒,,当任务精度为分时,睡眠时间建议为1分,以此类推。

 

Python定时器线程池原理详解 主要介绍了Python定时器线程池原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 立即下载

相关推荐

主流 AI 插件 之一的 Copilot 介绍

Copilot 是微软推出的一款人工智能助手,旨在通过自然语言交互帮助您提升工作效率和创造力,覆盖多平台,提供智能问答、内容生成、代码辅助等功能。其核心定位为“日常 AI 伴侣”,旨在通过自然语言交互提升工作与生活效率。

u014695938的博客 6881

Python周期任务神器之Schedule模块使用详解

Python周期任务神器之Schedule模块使用详解

aydolt的博客 4063

il2cpp分析-gobal-metadata.dat解密

打开ida,把libil2cpp拖到ida中按快捷键Shift+F12等待字符串分析完后,搜索global-metadata.dat。ida中双击sub_57EE7C进入,VS code中也跳转到LoadMetadataFile函数。VSCode打开il2cpp源代码,全局搜索global-metadata.dat。工具:010Editor,IDA 7.5,Jadx,VS Code。判断加密逻辑为根据文件的长度循环读取字节码做亦或加密。双击搜索出来的结果,切记要选il2cpp目录下的。

Android_machong的博客 8024

python 使用schedule模块定时执行任务

python中有一个轻量级的定时任务调度的库:schedule。他可以完成每分钟,每小时,每天,周几,特定日期的定时任务。因此十分方便我们执行一些轻量级的定时任务。 代码如下: import schedule import time def job(): print(“I’m working…”) schedule.every(10).minutes.do(job) schedule.every(...

qq_36028763的博客 6246

FCL碰撞检测库在Windows下的编译与配置(MinGW+CMake)

本文详细介绍了在Windows系统下使用MinGW和CMake编译配置FCL碰撞检测库的完整流程。内容涵盖MinGW-w64、CMake的安装与环境配置,关键依赖库Eigen和libccd的安装,以及FCL源码的编译、安装与实战测试。重点解析了CMake配置命令中的关键参数与常见错误解决方案,旨在帮助开发者高效完成FCL在Windows平台的部署,适用于机器人、游戏物理引擎等需要精确碰撞检测的开发场景。

sunny的博客 481

多周期路径约束(set_multicycle_path )

1.由慢到快的多周期约束 如下图所示,发射时钟周期是接受时钟周期的4倍。默认情况下,按照1T原则来进行静态时序分析和布局布线的。即建立时间是在发射沿后的第一个捕获沿检查,而保持时间是同一时刻下源时钟和捕获时钟的触发边沿下检查的(建立时间检查边沿的前一个触发沿)。 但是这样导致的问题就是该路径过于苛刻,为了满足这条路径的要求,不得不放弃其他路径。或者根本没办法保证这个默认的约束。总之最终造成...

Arist. 5506

python轻量级定时任务调度库schedule

import schedule import time def job(): print("I'm working...") schedule.every(10).minutes.do(job) schedule.every().hour.do(job) schedule.every().day.at("10:30").do(job) schedule.every(5).to(10).days.do(job) schedule.every().monday.do(job) schedule.

洪源的博客 1万+

基于龙虾Claw的会议纪要自动提取与重点内容总结办公场景实践

本文介绍如何使用龙虾Claw构建会议纪要自动提取与重点内容总结系统,实现会议内容的智能处理。

一键难忘的博客 253

python中定时任务schedule库用法详解

python中定时任务schedule库用法详解

IT之一小佬的博客 4万+

一台NAS两个系统:飞牛nas上完美运行群晖DSM?(飞牛nas+群晖nas套娃安装实操)

想在飞牛NAS上体验群晖DSM系统?💡 本文详细记录了飞牛nas上部署群晖的完整过程,从镜像转换到系统安装,每一步都有详细说明 🖥️,让你在不增加硬件成本的情况下,轻松实现一套硬件、多种系统的灵活部署 ✅

XiaoqiangClub的博客 2370

适航规章、标准,书籍资料下载汇总(更新中)

以下是一些收集到的适航相关的资料,分享给大家。(如果没有你想要的资料,请留言,等找到会及时更新!

qq_41854911的博客 2548

Python3学习(八):使用schedule模块定时执行任务

python中有一个轻量级的定时任务调度的库:schedule。他可以完成每分钟,每小时,每天,周几,特定日期的定时任务。因此十分方便我们执行一些轻量级的定时任务。 代码如下: import schedule import time def job(): print("I'm working...") schedule.every(10).minutes.do(job) sc...

技术宅拯救世界 9万+

Simulink开发项1000例实战专栏--实例38:基于Simulink的周波变换器(Cycloconverter)

需求分析周波变换器(Cycloconverter),也称为频率变换器或直接变频器,是一种将输入的固定频率交流电直接转换为不同频率的交流电的电力电子设备。它广泛应用于工业领域,如大功率电机驱动、风力发电、船舶推进系统等场合。与传统的间接变频器(如交-直-交变频器)相比,周波变换器具有更高的效率和更简单的结构,适用于需要低频输出的应用场景。

xiaoheshang_123的博客 334

python线程自动关闭吗_解决Python中定时任务线程无法自动退出的问题

python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子线程。from threading import Timerdef scheduletaskwrap():pritn "in task"Timer(10, scheduletaskwrap).star...

weixin_39684495的博客 321

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python中定时任务线程无法自动退出的问题

python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子线程。from threading import Timer def scheduletaskwrap(): pritn "in task" Timer(10, scheduletaskwra...

hhgood的博客 6419

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python实现多线程定时任务

在 Python 中实现多线程定时任务可以使用 threading 模块结合 time 模块,或者使用 APScheduler 库。下面分别介绍这两种方法:方法一:使用 threading 和 time 模块import threading import time # 定义定时任务函数 def scheduled_tas...

小屁孩大帅-保密的博客 699

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Python 多线程定时任务(threading+apscheduler)

1、代码实现 # -*- coding:utf-8 -*- import os import sys import threading from apscheduler.schedulers.blocking import BlockingScheduler from datetime import datetime import time def timer(n): while True: print(datetime.now().strftime("%Y-%m-%d %H:%

努力学习的大小宝 6632

python Timer 定时任务线程检测和启动的实现

背景 : 使用from threading import Timer 定时任务时有时候莫名其妙运行几天后的线程停止也找到什么问题。代码 :感受:threading import Timer 虽然这玩意不好使,但是轻量。。。。

weixin_55393410的博客 1057

Python定时任务sched和多线程Timer用法示例对比

一、sched的定时任务 from sched import * from time import * def print_time(msg="default"): print("当前时间",time(),msg) s = scheduler(time,sleep) print(time()) s.enter(5,1,print_time,("延迟5秒,优先级1",)) s.enter...

0.0 1884

Python 多线程 定时任务

原文链接: Python 多线程 定时任务 上一篇:...

阿豪 186

python脚本自动运行失败_解决Python中定时任务线程无法自动退出的问题

python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子线程。from threading import Timerdef scheduletaskwrap():pritn "in task"Timer(10, scheduletaskwrap).star...

weixin_39616880的博客 199

Python实现多线程编程脚本定时任务

Python脚本定时任务 import datetime import schedule import threading import time import os from datetime import datetime, date, timedelta ### #执行命令 def dituTask(): yesterday = (date.today() + timedelta(days=-1)).strftime("%Y%m%d") os.system("nohup python3

dong的博客 1472

python schedule多线程_Python定时任务sched模块用法示例

本文实例讲述了Python定时任务sched模块用法。分享给大家供大家参考,具体如下:通过sched模块可以实现通过自定义时间,自定义函数,自定义优先级来执行函数。范例一import timeimport schedschedule = sched.scheduler( time.time,time.sleep)def func(string1):print "now excuted func i...

weixin_39796238的博客 419

python执行两个定时任务_【笔记】:单线程下挂多个定时任务

单线程多定时任务前言:公司业务需求,实例当中大量需要启动定时器的操作;大家都知道python中的定时器用的是threading.Timer,每当启动一个定时器时,程序内部起了一个线程,定时器触发执行结束后,线程自动销毁;这里就涉及到一个问题,如果同时有大量启动定时器的需求时,内部线程过多,程序肯定就崩了,有没有启一个线程就能完成定时器的操作呢?网上查了一些资料,还没有看到能解决目前问题的现成代码,...

weixin_39582708的博客 585

python threading timer 退出_解决Python中定时任务线程无法自动退出的问题

python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子线程。from threading import Timerdef scheduletaskwrap():pritn "in task"Timer(10, scheduletaskwrap).star...

weixin_39916355的博客 1610
上一篇: alpine linux 安裝python指定版本以及pip
下一篇: python RSA 公钥解密方法
力宁
博客等级 码龄12年 13粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值