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

Python Threading:如何在独立线程重复执行函数?代码无输出求助

解决Python定时器无输出的问题

嘿,我完全懂你的感受——刚从JavaScript切换到Python,遇到这种“代码看起来和别人一样却不工作”的情况真的会懵!让我帮你找出问题所在,以及怎么修复它。

问题根源:输出缓冲的小坑

你的代码逻辑本身是没问题的,但有个容易被忽略的细节导致你看不到输出:Python的标准输出缓冲机制。

在很多环境(比如部分IDE、非交互式终端)中,Python的print()默认采用块缓冲模式——输出内容会先存在内存缓冲区里,不会立刻显示到终端,直到缓冲区被填满或者程序结束。而你的程序因为Timer线程一直在循环运行,进程不会主动结束,缓冲区也就一直没被刷新,所以你看不到任何内容,只能看到进程保持存活。

快速修复方案

最简单的解决办法就是强制刷新输出缓冲区,只需要给print语句加上flush=True参数:

import threading
def printit():
    print("Hello, World!", flush=True)  # 强制刷新缓冲区
    threading.Timer(1.0, printit).start()
threading.Timer(1.0, printit).start()

修改后,每次调用print()都会立刻把内容输出到终端,你就能看到每秒打印一次"Hello, World!"了。

额外提示:更直观的定时循环写法

如果你觉得用threading.Timer递归创建线程的方式有点绕(毕竟和JavaScript的setInterval逻辑不太一样),可以试试用threading.Thread配合time.sleep实现定时循环,可读性更强:

import threading
import time

def print_loop():
    while True:
        print("Hello, World!", flush=True)
        time.sleep(1)

# 启动后台线程
threading.Thread(target=print_loop, daemon=True).start()

# 让主线程保持运行(比如等待用户输入来终止程序)
input("按回车键停止程序...\n")

这种写法更贴近你熟悉的JS定时逻辑,不需要递归创建Timer对象,代码逻辑也更直白。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:42:20