如何在Python中实现两个函数同时并行运行?
并行运行两个Python函数的实现方法
要实现两个函数同步执行、整体耗时约4秒(匹配最长任务的执行时长,而非顺序执行的2+4=6秒),可以通过两种Python原生内置方案实现,无需额外安装第三方依赖:
方案1:使用 threading 多线程实现
这是最基础的手动管理线程的实现方式,代码如下:
import time import threading def short_task(): time.sleep(2) # 打印仅用于直观展示任务完成顺序,不改动原有函数核心逻辑 print("短任务执行完成") def long_task(): time.sleep(4) print("长任务执行完成") if __name__ == "__main__": start_time = time.time() # 为每个待运行的函数创建独立线程 thread1 = threading.Thread(target=short_task) thread2 = threading.Thread(target=long_task) # 启动两个线程,进入同步执行状态 thread1.start() thread2.start() # 阻塞等待两个线程全部执行完成 thread1.join() thread2.join() print(f"程序总耗时:{time.time() - start_time:.2f} 秒")
实现逻辑说明:
- 两个线程启动后,会在独立执行流中同时运行,
short_task等待2秒的过程中,long_task也在同步等待4秒,不存在顺序排队的等待叠加 join()方法的作用是让主线程等待所有子线程跑完再退出,避免主线程提前结束导致任务中断
方案2:使用内置线程池 ThreadPoolExecutor 实现
这是Python3.2+版本自带的更简洁的并发写法,不需要手动管理线程的生命周期,代码如下:
import time from concurrent.futures import ThreadPoolExecutor def short_task(): time.sleep(2) print("短任务执行完成") def long_task(): time.sleep(4) print("长任务执行完成") if __name__ == "__main__": start_time = time.time() # 最多允许2个并发工作线程的池,适配当前两个任务的规模 with ThreadPoolExecutor(max_workers=2) as pool: pool.submit(short_task) pool.submit(long_task) print(f"程序总耗时:{time.time() - start_time:.2f} 秒")
实现逻辑说明:
- 通过上下文管理器(
with语法)自动管理线程池的创建、销毁流程 - 自动等待池内所有提交的任务执行完成后再退出,代码更简洁不易出错
适配场景说明
上述方案完全适配当前示例场景。示例中两个函数的核心逻辑是
time.sleep()的等待操作,属于IO密集型任务,执行等待过程中Python会释放全局解释器锁(GIL),两个线程可以真正并行运行,不会出现逻辑阻塞。
如果后续替换为纯CPU计算密集型任务(比如大规模数值运算、视频帧处理),多线程会受GIL限制无法实现真正并行,此时才需要替换为多进程方案。
内容的提问来源于stack exchange,提问作者Johann Lau
相关产品推荐
相关产品推荐

