如何实现同时运行多个while循环与其他代码行?
为什么你写的多while循环是串行交替执行
Python默认的代码运行环境是单线程,代码会严格按照书写顺序逐行执行,不存在天然的并行能力。你写的嵌套while结构本质上是同一个执行流里的条件分支:
- 外层循环启动后,首先进入第一个内层while判断,只要
parity是偶数就执行打印、自增,直到parity变成奇数,第一个内层循环退出 - 程序立刻进入第二个内层while判断,只要
parity是奇数就执行打印、自增,直到parity变成偶数,第二个内层循环退出 - 程序回到外层循环,重复上述流程
这种固定顺序的条件切换,就是你观察到“交替平衡串行执行”的根本原因——全程没有真正的并行,只是单线程下按固定顺序切换不同的执行分支。
实现多while逻辑同时运行的可行方案
- 多线程实现:将每一段独立的while循环逻辑封装为单独函数,通过
threading模块为每个逻辑创建独立执行线程。操作系统会按时间片调度不同线程的执行,能够实现多个循环交替运行的并行感知,代码示例:
import threading import time def loop_print_running(): while True: print('running') time.sleep(0.1) # 主动让出执行权,让其他线程获得调度 def loop_print_true(): while True: print('True') time.sleep(0.1) # 启动守护线程运行两个循环逻辑 threading.Thread(target=loop_print_running, daemon=True).start() threading.Thread(target=loop_print_true, daemon=True).start() # 主线程保持阻塞,避免程序直接退出 time.sleep(10000)
注:受Python GIL机制限制,CPU密集型的循环逻辑多线程仍为串行执行,但带IO等待、主动挂起的循环会呈现明显的并行效果,满足常规开发需求。
- 异步协程实现:针对轻量并发场景,可使用
asyncio事件循环调度多个协程版本的while逻辑,相比线程资源开销更低,同样能实现多循环交替运行的效果,代码示例:
import asyncio async def loop_print_running(): while True: print('running') await asyncio.sleep(0.1) # 主动挂起,让出执行权给其他协程 async def loop_print_true(): while True: print('True') await asyncio.sleep(0.1) async def main(): # 并发调度两个协程任务 await asyncio.gather( loop_print_running(), loop_print_true() ) asyncio.run(main())
- 单线程手动调度实现:无需引入线程、协程依赖,可在同一个单层while循环内,按顺序依次执行各段循环逻辑的内容,模拟并行效果。你当前的代码就是手动调度的粗糙实现,只是嵌套了多余的条件判断,可简化为更直观的结构:
while True: print('running') print('True')
这种结构的执行效果和你原代码完全一致,但去掉了无意义的嵌套while和parity变量判断,逻辑更简洁。
注意:无论采用哪种方案,如果循环内部没有主动让出执行权的操作(比如sleep、IO等待、主动挂起),单个循环会独占整个执行流,其他逻辑无法获得运行机会,无法实现并行效果。
内容的提问来源于stack exchange,提问作者ahmed_elghoroury
相关产品推荐
相关产品推荐

