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

Python threading.Timer打印混乱,是执行顺序异常还是仅输出问题?

问题结论

你遇到的打印错乱仅属于输出层面的问题,定时器回调的执行逻辑本身完全正常,不存在前一次迭代未完成就启动下一次干扰业务逻辑的情况。

根因分析

Python的内置print()函数本身不是线程安全的:

  • print()执行时会拆分为两个独立操作:先输出传入的内容文本,再输出换行符\n
  • 多个线程同时调用print()时,两个操作的间隙可能被其他线程的打印操作抢占,导致多个线程的内容、换行符拼接错位,就出现了你看到的内容连在一起、换行位置错乱的情况
  • 每个TimerFinished回调的入参param都是正确的,回调本身的执行逻辑没有被打乱,只是打印输出的内容发生了交错

修复方案

如果要避免打印错乱,只要给打印操作加线程锁,保证单次打印的原子性即可,修改后的代码示例:

import time
import threading
from TestTimerObject import TimerObject

# 初始化打印专用的线程锁
print_lock = threading.Lock()

def TestTimers():
    timers = []
    for x in range(10):
        new_timer_obj = TimerObject("Timer" + str(x))
        new_timer_obj.timer = threading.Timer(10.0, TimerFinished, [x])
        new_timer_obj.timer.start()

def TimerFinished(param):
    # 加锁保证单次打印的内容和换行不会被其他线程打断
    with print_lock:
        print("Finished ", param)

TestTimers()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:00:07