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

如何同时运行两个Python函数,实现文字打印时显示加载动画的效果

逐字打印文本同步显示加载动画的实现方案

原代码存在三个核心问题:

  1. 函数名引用错误:定义的加载动画函数是animated_loading,线程绑定的目标函数写为了不存在的animation
  2. 加载动画仅循环一次就停止,无法适配不同长度的文本打印时长
  3. 没有设置停止信号,无法在文本打印完成后自动终止动画

可直接运行的修复代码

import sys
import time
from threading import Thread

# 加载动画停止标志位,也可以用threading.Event实现更规范的线程通信
loading_stop = False

# 逐字打印函数
def delay_print(string):
    for i in string:
        sys.stdout.write(i)
        sys.stdout.flush()
        time.sleep(0.04)

# 加载动画函数
def animated_loading():
    chars = "/—\\|"
    while not loading_stop:
        for char in chars:
            # 收到停止信号立刻退出,不完成本轮循环
            if loading_stop:
                break
            sys.stdout.write('\r' + '加载中 ' + char)
            time.sleep(.1)
            sys.stdout.flush()
    # 动画停止后清空当前行的加载提示
    sys.stdout.write('\r' + ' ' * 10 + '\r')
    sys.stdout.flush()

# 文本打印任务
def text_task():
    global loading_stop
    delay_print("\n\nText:\n" + "Hi there,\n\n"
                "XX航空为所有乘客提供丰富服务\n"
                "目前我们所有飞往三亚的航线正推出20%折扣优惠\n"
                "座位有限,立即预订!\n\n")
    # 文本打印完成,修改停止标志
    loading_stop = True


if __name__ == "__main__":
    t_loading = Thread(target=animated_loading)
    t_text = Thread(target=text_task)

    t_loading.start()
    t_text.start()

    # 等待两个线程执行完成
    t_text.join()
    t_loading.join()

核心实现逻辑说明

  • 使用标志位同步两个线程的状态:文本打印线程执行结束后修改标志位,加载动画线程每次循环都会检查标志位,收到停止信号立刻退出
  • 加载动画用\r回车符回到当前行首,实现同一位置的动画刷新,不会和上方的逐字打印内容冲突
  • 动画停止后主动清空当前行的加载提示,不会残留多余字符
  • 用if __name__ == "__main__"包裹线程启动逻辑,避免Windows平台多线程运行时报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:54:01