Python 实现函数定时轮询执行的两种方案对比

追风的人
追风的人
发布时间:2026-10-11| 5人浏览过
原创

本文介绍在 Python 中实现函数定时轮询执行的两种常见方式:利用 threading.Timer 创建子线程循环,以及使用 time.sleep 阻塞主线程。通过代码示例对比两者的资源消耗与实现逻辑,帮助开发者根据场景选择合适的方案。

目标:定时执行函数

在 Python 开发中,有时需要让某个特定函数每隔固定的时间间隔重复执行一次。实现这一需求主要有两种思路:一种是基于多线程机制的 Timer 类,另一种是基于时间模块的 sleep 阻塞方式。

方法一:使用 Timer 类实现

threading.Timer 是 Python 标准库中用于控制函数在指定时间后执行一次的类。若要实现多次定时执行,需要在循环中反复创建并启动新的 Timer 实例。

具体实现逻辑如下:

  1. 定义一个死循环 while True。
  2. 在每次循环中,实例化 Timer 对象,传入执行间隔和回调函数。
  3. 调用 start() 启动计时器。
  4. 调用 join() 阻塞当前线程,等待计时器执行完毕。

以下是使用 Timer 实现轮询的代码示例:

from threading import Timer
import time
 
def printHello():
 print ("Hello")
 print("当前时间戳是", time.time())
 
def loop_func(func, second):
 #每隔second秒执行func函数
 while True:
  timer = Timer(second, func)
  timer.start()
  timer.join()
 
loop_func(printHello, 1)

运行上述代码后,控制台会按设定的时间间隔输出“Hello”及当前时间戳。由于每次循环都创建了新线程,这种方式会生成大量的线程对象。

方法二:使用 time.sleep 阻塞

第二种方法是直接利用 time 模块的 sleep 函数。该方式直接在主线程中执行目标函数,随后通过 sleep 阻塞程序指定的秒数,再进入下一次循环。

代码实现如下:

import time
 
def printHello():
 print ("Hello")
 print("当前时间戳是", time.time())
 
def loop_func(func, second):
 # 每隔second秒执行func函数
 while True:
  func()
  time.sleep(second)
 
loop_func(printHello, 1)

执行结果同样会按时间间隔输出日志。与第一种方法相比,这种方式没有创建额外的线程,因此更节约系统资源。

两种方式的对比

在实际应用中,选择哪种方式取决于具体的资源需求和场景:

  • 资源消耗:方法一(Timer)会生成很多线程,随着运行时间的增加,线程对象的创建和销毁会带来一定的开销;方法二(sleep)仅阻塞主线程,未生成多余线程,资源占用更少。
  • 实现复杂度:方法二逻辑更为直观简单,适合对资源敏感的场景;方法一虽然实现了异步调用的效果,但在轮询场景下显得较为冗余。

综上所述,若仅需简单的定时轮询且对线程资源敏感,推荐使用 time.sleep 的方式;若涉及复杂的异步任务调度,可考虑结合多线程机制进行优化。

以上就是 Python 轮询执行某函数的2种方式的详细内容,更多关于 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 算法库。