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

Python中如何仅让单个函数执行sleep休眠而不阻塞整个程序

解决方法

你需要将两个独立执行的函数放到不同线程中运行,Python的time.sleep()只会阻塞调用它的当前线程,不会影响其他线程的执行。

原有代码注意事项

  1. 自定义函数命名为print会覆盖Python内置的打印函数,需要重命名
  2. 多线程读写全局变量需要加锁,避免出现数据竞争导致结果异常

修改后的可运行代码

from time import sleep
import threading

a = 0
# 全局变量读写锁
a_lock = threading.Lock()

def calc(init_a, b):
    global a
    current_val = init_a
    while True:
        current_val *= b
        if current_val >> 12:
            # 仅阻塞当前calc线程,不会影响打印线程
            sleep(12)
        # 写入全局变量加锁
        with a_lock:
            a = current_val

def print_a():
    global a
    while True:
        # 读取全局变量加锁
        with a_lock:
            print_val = a
        print(print_val)
        # 可调整打印间隔,避免占用过多CPU
        sleep(0.1)

if __name__ == "__main__":
    # 启动calc线程,这里示例初始值为1、b为2,可按需修改
    t1 = threading.Thread(target=calc, args=(1, 2), daemon=True)
    # 启动打印线程
    t2 = threading.Thread(target=print_a, daemon=True)
    
    t1.start()
    t2.start()
    
    # 保持主进程运行
    while True:
        sleep(1)

核心逻辑说明

  • threading.Thread会创建独立的执行流,不同线程的运行状态互不干扰
  • 线程的daemon参数设为True,可以保证主进程退出时所有子线程同步关闭
  • 读写共享的全局变量时加锁,能避免不同线程同时修改数据导致的异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:15:04