Python 实现函数定时轮询执行的两种方案对比
本文介绍在 Python 中实现函数定时轮询执行的两种常见方式:利用 threading.Timer 创建子线程循环,以及使用 time.sleep 阻塞主线程。通过代码示例对比两者的资源消耗与实现逻辑,帮助开发者根据场景选择合适的方案。
目标:定时执行函数
在 Python 开发中,有时需要让某个特定函数每隔固定的时间间隔重复执行一次。实现这一需求主要有两种思路:一种是基于多线程机制的 Timer 类,另一种是基于时间模块的 sleep 阻塞方式。
方法一:使用 Timer 类实现
threading.Timer 是 Python 标准库中用于控制函数在指定时间后执行一次的类。若要实现多次定时执行,需要在循环中反复创建并启动新的 Timer 实例。
具体实现逻辑如下:
- 定义一个死循环
while True。 - 在每次循环中,实例化
Timer对象,传入执行间隔和回调函数。 - 调用
start()启动计时器。 - 调用
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 定时执行函数的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









