【Python与线程】
" 目录 一、全局解释器锁GIL 二、Python线程模块的选择 三、线程的创建 三、锁机制 四、信号量 五、事件 六、条件 七、定时器 八、线程队列 九、线程池 补充:线程安全 import threading obj = threading.local()# local():可实现,多线程操作某一数据,不会出现数据混乱的情况# 原理:空间换时间 def add(i): obj.n = i print(i, obj.n, threading.current_thread().ident) for i in range(20): th = threading.Thread(target=add, args=(i,)) th.start() 一、全局解释器锁GIL Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中同时只有一个线程在执行。虽然Python解释器中可以“运行”多个线程,但在任意时刻只有一个线程在解释器中运行. 对于Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁保证了同一时刻只有一个线程在运行. 同一时间点,GIL只允许同一个进程中的一个线程访问cpu,即CPython解释器中没有真正的线程并行,只有进程可以实现。故I/O操作多时,使用多线程最好;计算密集时,使用多进程最好。 在多线程环境中