You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python循环中按不同时间间隔执行多个函数?

按固定间隔执行多函数的Python实现方案

你原来用循环计数器的方法问题在于依赖循环耗时固定,但实际函数执行时间不确定,导致间隔不准。正确的思路是基于实际时间戳判断是否执行函数,下面给两种适合新手的实现方法:

方法一:单线程时间差判断(简单易理解)

这种方法在单个循环里,通过记录每个函数上次执行的时间,每次检查当前时间与上次执行时间的差值是否达到设定间隔,达到就执行函数并更新时间戳。

import time

def function1():
    print("Running function1")

def function2():
    print("Running function2")

def function3():
    print("Running function3")

def function4():
    print("Running function4")

def main():
    # 初始化各函数的上次执行时间为当前时间
    last_run1 = time.time()
    last_run2 = time.time()
    last_run3 = time.time()
    last_run4 = time.time()

    # 定义每个函数的执行间隔(单位:秒)
    interval1 = 1
    interval2 = 2
    interval3 = 5
    interval4 = 10

    while True:
        current_time = time.time()

        # 检查function1是否到执行时间
        if current_time - last_run1 >= interval1:
            function1()
            last_run1 = current_time

        # 检查function2是否到执行时间
        if current_time - last_run2 >= interval2:
            function2()
            last_run2 = current_time

        # 检查function3是否到执行时间
        if current_time - last_run3 >= interval3:
            function3()
            last_run3 = current_time

        # 检查function4是否到执行时间
        if current_time - last_run4 >= interval4:
            function4()
            last_run4 = current_time

        # 短暂休眠0.1秒,减少CPU空转消耗
        time.sleep(0.1)

if __name__ == "__main__":
    main()

优点:

  • 逻辑简单,新手容易看懂和调试
  • 不需要额外的多线程知识
  • 能保证每个函数的执行间隔是从上次执行完成开始计算的

方法二:多线程并行执行(适合函数耗时较长的场景)

如果某个函数执行时间超过了它的间隔(比如function1要跑2秒,但间隔是1秒),单线程会导致后续函数的执行被延迟。这时可以给每个函数单独开线程,让它们各自按间隔执行,互不干扰。

import threading
import time

def function1():
    while True:
        print("Running function1")
        time.sleep(1)

def function2():
    while True:
        print("Running function2")
        time.sleep(2)

def function3():
    while True:
        print("Running function3")
        time.sleep(5)

def function4():
    while True:
        print("Running function4")
        time.sleep(10)

def main():
    # 创建线程,daemon=True表示线程随主线程退出而终止
    t1 = threading.Thread(target=function1, daemon=True)
    t2 = threading.Thread(target=function2, daemon=True)
    t3 = threading.Thread(target=function3, daemon=True)
    t4 = threading.Thread(target=function4, daemon=True)

    # 启动所有线程
    t1.start()
    t2.start()
    t3.start()
    t4.start()

    # 主线程保持运行,防止程序退出
    while True:
        time.sleep(1)

if __name__ == "__main__":
    main()

优点:

  • 各函数独立执行,互不影响间隔
  • 适合函数执行时间不确定或较长的场景

总结

  • 新手先从方法一开始,理解时间戳判断的核心逻辑
  • 如果需要并行执行、避免函数间相互阻塞,再用方法二的多线程方案

内容的提问来源于stack exchange,提问作者Gnad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:57:26