Python中如何仅让单个函数执行sleep休眠而不阻塞整个程序
解决方法
你需要将两个独立执行的函数放到不同线程中运行,Python的time.sleep()只会阻塞调用它的当前线程,不会影响其他线程的执行。
原有代码注意事项
- 自定义函数命名为
print会覆盖Python内置的打印函数,需要重命名 - 多线程读写全局变量需要加锁,避免出现数据竞争导致结果异常
修改后的可运行代码
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
相关产品推荐
相关产品推荐

