如何让一个任务延迟执行,同时不阻塞主循环的独立运行?
解决Python循环阻塞问题:同时执行定时任务
你的代码里sendData函数中的time.sleep(5)会阻塞主循环,导致主循环必须等待5秒才能继续下一次迭代,所以无法实现主循环每0.5秒打印数值、同时每5秒打印延迟数据的需求。下面提供两种简单的解决思路:
方案一:使用threading模块创建子线程
把耗时的sendData任务放到子线程中执行,让主循环不受阻塞:
import time import threading i = 1 def sendData(x): time.sleep(5) print("delayed data: ", x) while True: print(i) # 启动守护线程执行sendData,不阻塞主循环 threading.Thread(target=sendData, args=(i,), daemon=True).start() i += 1 time.sleep(0.5)
daemon=True将子线程设为守护线程,当主程序终止时,子线程会自动退出,避免残留线程。- 主循环每0.5秒打印一次
i,同时每次启动一个子线程处理5秒延迟后的打印任务,两者并行执行。
方案二:使用线程池管理任务
如果需要频繁创建线程,用ThreadPoolExecutor复用线程更高效:
import time from concurrent.futures import ThreadPoolExecutor i = 1 def sendData(x): time.sleep(5) print("delayed data: ", x) # 创建线程池,限制最大线程数避免资源浪费 with ThreadPoolExecutor(max_workers=5) as executor: while True: print(i) executor.submit(sendData, i) i += 1 time.sleep(0.5)
线程池会自动管理线程的创建和复用,比每次新建线程更节省系统资源,适合这种持续提交小任务的场景。
内容的提问来源于stack exchange,提问作者K___V
相关产品推荐
相关产品推荐

