Python面试题更新 2026-08-05

Python 程序中,通过 multithreading 可以采取哪些实际做法来提升程序性能?

性能优化技术原理方案权衡Python

考察说明

考查对 Python 多线程适用场景及 GIL 限制的理解,以及能否给出具体的性能优化手段。

回答思路

  1. 【回答框架 1】多线程适用于 I/O 密集型任务,因为 GIL 会限制 CPU 密集型任务的并行执行。对于计算密集型,考虑多进程或使用 C 扩展。
  2. 【回答框架 2】使用 concurrent.futures.ThreadPoolExecutor 管理线程池,避免手动创建大量线程。设置合适的 max_workers,例如基于 I/O 等待比例估算,并最终通过压测确定。
  3. 【回答框架 3】避免共享状态,减少锁竞争。使用线程本地存储或不可变数据结构,或者用 queue.Queue 进行线程间通信。
  4. 【回答框架 4】对于 I/O 密集型任务,可以用异步 I/O 如 asyncio 或协程,但多线程仍简单有效。对于 CPU 密集型,可以采用 multiprocessing 并行,但要注意进程间通信开销。
  5. 【回答框架 5】实际优化时,先分析瓶颈,使用 profiling 工具如 cProfile 定位热点,再决定是否用多线程。多线程并不保证性能提升,可能因 GIL 和上下文切换导致下降。
  6. 【关键点 1】GIL 限制 CPU 密集型任务的并行,多线程适合 I/O 密集型。
  7. 【关键点 2】使用 ThreadPoolExecutor 管理线程池以简化并发。
  8. 【关键点 3】通过队列或不可变状态减少锁竞争。
  9. 【关键点 4】压测验证线程数调整,避免盲目增加线程。
  10. 【关键点 5】对于计算密集任务,改用 multiprocessing 或异步方案。
  11. 【易错点 1】认为 Python 多线程能利用多核并行加速 CPU 密集计算。
  12. 【易错点 2】忽略 GIL 存在,导致线程间切换开销大于收益。
  13. 【易错点 3】不控制线程数量,创建过多线程引发资源竞争和上下文切换开销。