线程模块
线程和进程的主要区别
1.线程数据共享,线程启动,关闭,切换特别快,大概是进程的10倍
gc 垃圾回收机制
引用计数 + 分带回收
在cpython中 全局解释器是用来完成垃圾回收机制的,对不同线程引用计数的变化记录更加精确
GIL(global interpreter lock)
导致了同一进程中的多个线程只有一个线程真正被cpu执行
线程节省的是io操作的时间,而不是cpu计算的时间,因为cpu的计算速度非常快
线程执行起来确实快,大概是进程的100倍
由于线程数据共享,大大了方便了对数据的操作,下面100,很快被减到0
dic = 100 def func(): global dic dic -= 1 if __name__ == '__main__': lock = Lock() t_l =[] for i in range(100): t = Thread(target=func) t_l.append(t) t.start() for t in t_l: t.join() print(dic)
线程的属性 : enumerate() : 获取当前存活的线程对象,active_count(): 计算当前活着的线程数
ident 线程id name :线程名 current_thread() 获取当前线程对象
from threading import Thread,current_thread,active_count,enumerate def func(i): print('start%s'%i) time.sleep(1) #获取当前线程id print(current_thread().ident) print('end%s'%i) if __name__ == '__main__': t_l =[] for i in range(10): #开启线程 # Thread(target=func,args=(i,)).start() p = Thread(target=func,args=(i,)) t_l.append(p) p.start() print(p.ident,p.name) print(enumerate(),active_count()) for p in t_l: p.join() print('所有的线程都执行完了')
面向对象开启线程
from threading import Thread class Mythread(Thread): def __init__(self,name,age): self.name1 =name self.age =age super().__init__() def run(self): print(self.ident) if __name__ == '__main__': t = Mythread('wang',12) t.start() print(t.ident)

浙公网安备 33010602011771号