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

如何通过运行另一函数终止当前正在执行的Python无限循环

实现方案

可以通过运行状态标志位+子线程运行循环的方式实现需求,原有的无限循环直接在主线程运行会阻塞整个程序,导致OFF按钮无法被触发,所以需要调整如下:


调整步骤

  • 新增全局控制变量,用来标记循环运行状态、存储循环运行的线程实例,避免重复启动循环
import threading
import random

# 循环运行控制标志位
sparkles_running = False
# 存储SPARKLES函数的后台运行线程
sparkles_thread = None
  • 修改SPARKLES函数的循环判断条件,不再用固定的while True,改为读取控制标志位判断是否继续运行
def SPARKLES():
    global sparkles_running
    sparkles_running = True
    while sparkles_running:
        pixel = random.choice(tree)
        pixel.color = random_color()
  • 给HTML按钮绑定的SPARKLES触发逻辑新增线程启动逻辑,避免循环阻塞主线程
# 该函数为SPARKLES按钮实际绑定的触发函数
def trigger_sparkles():
    global sparkles_thread
    # 避免重复点击按钮启动多个循环线程
    if sparkles_thread and sparkles_thread.is_alive():
        return
    # daemon=True设置为守护线程,主程序退出时线程会自动销毁
    sparkles_thread = threading.Thread(target=SPARKLES, daemon=True)
    sparkles_thread.start()
  • 修改OFF函数,先修改控制标志位通知循环停止,待循环线程退出后再执行关灯操作
def OFF():
    global sparkles_running
    # 发送停止循环的信号
    sparkles_running = False
    # 等待循环线程完全退出,避免关灯后残留的循环逻辑仍修改灯珠颜色
    if sparkles_thread and sparkles_thread.is_alive():
        sparkles_thread.join()
    tree.off()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:27:01