python 多线程写法
时间: 2024-12-25 15:22:43 浏览: 4
Python 多线程的实例详解
### Python中的GIL及其对多线程的影响
全局解释器锁(Global Interpreter Lock,简称GIL)是CPython解释器内部的一个互斥锁[^1]。该机制确保同一时刻只有一个线程在执行字节码操作,即使是在多核CPU环境下也是如此。这主要是为了简化内存管理并保护C级别的数据结构不被并发访问所破坏。
由于存在GIL,在涉及大量计算密集型任务时,Python的多线程可能无法充分利用多处理器的优势来加速程序运行速度;然而对于I/O密集型应用来说,尽管受到GIL限制,仍然可以通过切换到等待状态下的其他线程从而获得一定的性能提升。
要克服由GIL带来的局限性,可以考虑采用以下几种方式之一:
- 使用`concurrent.futures`模块中的ThreadPoolExecutor类来进行异步调用;
- 利用multiprocessing库启动多个进程代替线程以绕过GIL约束;
- 对于特定场景下可选用支持无锁特性的第三方扩展包如Numba或Cython等工具优化代码逻辑。
### 编写一个多线程Python程序示例
下面给出一个基于标准库threading模块构建简单多线程应用程序的例子,此例子展示了如何创建自定义线程类以及主线程与其他子线程之间的交互过程[^2]。
```python
#!/usr/bin/env python3
# -8 -*-
import time
import threading
class MyThread(threading.Thread):
def run(self):
for i in range(5):
print(f'thread {self.name}, number: {i}')
time.sleep(1)
def main():
print("Start main thread")
# 创建三个线程实例
threads = [MyThread() for _ in range(3)]
# 启动所有线程
for t in threads:
t.start()
# 主线程等待所有子线程完成后再继续往下执行
for t in threads:
t.join()
print("End main thread")
if __name__ == '__main__':
main()
```
这段代码实现了基本的功能需求:通过继承`threading.Thread`基类来自定义新的工作单元——即每个独立的任务流程,并且能够控制它们按照预期顺序开始和结束。
阅读全文