线程模块

线程和进程的主要区别

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)

 

posted @ 2021-02-03 13:05  苦行僧冬*婷  阅读(71)  评论(0)    收藏  举报