如何在Python中让无限循环运行时执行循环外代码?
实现无限循环与其他代码并行执行的方案
当然可以做到!你的核心问题是避免无限while循环阻塞主线程,让后面的代码能同时运行。下面给你几个实用的Python实现方案:
方案一:使用多线程(Threading)
这是最常用的方法之一,把无限循环放到单独线程里,主线程就能不受阻塞地执行后续代码。
示例代码:
import threading import time def infinite_loop(): while True: print('i will loop forever') time.sleep(1) # 加延迟避免刷屏太快,也给线程切换留机会 # 启动线程运行无限循环 loop_thread = threading.Thread(target=infinite_loop) loop_thread.daemon = True # 设置守护线程,主线程结束时自动退出该线程 loop_thread.start() # 主线程继续执行后面的代码 print('this code is now executed while the loop runs!') # 这里加个延迟,否则主线程瞬间结束后,守护线程也会跟着终止 time.sleep(5)
方案二:使用异步IO(Asyncio)
如果你的循环涉及IO操作,异步IO是更轻量的选择,不用创建额外线程,靠事件循环调度任务。
示例代码:
import asyncio async def infinite_loop(): while True: print('i will loop forever') await asyncio.sleep(1) # 异步等待,主动让出控制权给其他任务 async def main(): # 创建并启动循环任务 loop_task = asyncio.create_task(infinite_loop()) # 执行其他代码 print('this code is executed alongside the loop!') # 等待循环任务完成(因为是无限循环,会一直运行) await loop_task asyncio.run(main())
方案三:使用多进程(Multiprocessing)
如果你的无限循环是CPU密集型任务,多进程能绕过Python的GIL(全局解释器锁),充分利用多核CPU资源。
示例代码:
import multiprocessing import time def infinite_loop(): while True: print('i will loop forever') time.sleep(1) # 启动进程运行循环 loop_process = multiprocessing.Process(target=infinite_loop) loop_process.daemon = True loop_process.start() # 主进程执行后续代码 print('this code runs while the loop is in another process!') time.sleep(5)
关键注意点
- 守护线程/进程:设置
daemon=True后,主线程/主进程结束时,子线程/子进程会自动终止,避免程序挂起无法退出。 - 任务切换:示例里的
sleep操作不仅是控制输出频率,更重要的是让线程/事件循环有机会切换到其他任务执行。 - 资源共享:如果需要在循环和主线程之间共享数据,线程场景要加
threading.Lock保证线程安全,进程场景要用multiprocessing.Queue这类进程间通信工具。
内容的提问来源于stack exchange,提问作者Seyi Oginni
相关产品推荐
相关产品推荐

