Python sched模块定时任务用法与多线程实现

不晚
不晚
发布时间:2026-10-13| 6人浏览过
原创

本文详解Python中sched模块的定时任务用法,包括enter方法的参数含义、优先级处理及run()阻塞特性。同时介绍利用threading.Timer实现非阻塞多线程定时任务的方案,解决单线程执行导致的延迟问题,帮助开发者掌握灵活的任务调度技巧。

本文详细介绍Python中sched模块在定时任务中的应用方法,供读者参考学习。

借助sched模块,可以灵活地自定义执行时间、指定回调函数以及设定任务优先级来调度函数执行。

示例一

import time
import sched
schedule = sched.scheduler( time.time,time.sleep)
def func(string1):
  print "now excuted func is %s"%string1
print "start"
schedule.enter(2,0,func,(1,))
schedule.enter(2,0,func,(2,))
schedule.enter(3,0,func,(3,))
schedule.enter(4,0,func,(4,))
schedule.run()
print "end"

schedule是一个调度器对象,其变量名可任意指定。

schedule.enter(delay,priority,action,arguments)

  • 第一个参数为整数或浮点数,表示距离当前时间多少秒后执行该action任务。
  • 第二个参数priority表示优先级,数值越小优先级越高(0为最高,1次之,2再次)。若多个任务预定在同一时刻执行,系统将依据优先级决定执行顺序。
  • 第三个参数指定要执行的任务,通常理解为待执行函数的名称。
  • 第四个参数为传递给定时执行函数的具体参数。建议将参数用括号包裹;若仅传入单个参数,括号内该参数后必须添加逗号,否则可能引发错误。

具体代码如下:

schedule.enter(delay, priority, action, (argument1,))

调用run()会一直阻塞程序,直至所有任务执行完毕。由于所有任务在同一线程中运行,若某个任务耗时超过其他任务的等待时间,后续任务将被推迟执行。这确保了任务不丢失,但实际调用时间会晚于设定时间。

多线程执行定时任务方案

示例二

import time
import sched
from threading import Timer
def print_name(str):
  print "i'm %s"%str
print "start"
Timer(5,print_name,("superman",)).start()
Timer(10,print_name,("spiderman",)).start()
print "end"

利用多线程机制实现定时任务调度。

在多线程环境下,若仅依赖schedule,可能因线程安全问题导致阻塞:当一个任务未结束时,其他任务需等待执行。

改用threading.Timer可避免上述问题。其效果是直接执行Print start和print end,而定时任务则独立分开执行。此时打印end不会发生阻塞。

如需了解更多Python相关知识,可查阅本站专题:《Python日期与时间操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。

希望本文所述内容对大家的Python程序设计有所帮助。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。