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
相关产品推荐
相关产品推荐

