主要内容:
- 1.线程的创建
- 2.多线程与多进程
- 3.锁
- 4.守护线程
- 5.信号量
1.线程的创建
(1)方式一:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from threading import Thread import time def func(n): time.sleep(2) print(n) if __name__ == '__main__': t = Thread(target=func,args = (1,)) t.start() print("主线程结束")
(2)方式二:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from threading import Thread class MyThread(Thread): def __init__(self,n): super().__init__() self.n = n def run(self): print (self.n) if __name__ == '__main__': t = MyThread("呵呵") t.start() print("主线程结束")
2.多线程与多进程
进程:导入的模块、执行的python文件的文件所在位置、内置的函数、文件里面的这些代码、全局变量等等,然后线程里面有自己的堆栈(类似于一个列表,后进先出)和寄存器,里面存着自己线程的变量,操作等等,占用的空间很小
(1)线程与进程的效率对比
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import time from multiprocessing import Process from threading import Thread def func(n): num = 0 for i in range(n): num += i if __name__ == '__main__': #在主进程下开启线程 t_s_t =time.time() t_lst =[] for i in range(10): t = Thread(target=func,args=(10,)) t.start() t_lst.append(t) [tt.join() for tt in t_lst] t_e_t = time.time() t_dif_t = t_e_t - t_s_t #在主进程下开启子进程 p_s_t = time.time() p_lst = [] for ii in range(10): p = Process(target=func,args=(10,)) p.start() [pp.join() for pp in p_lst] p_e_t = time.time() p_dif_t = p_e_t -p_s_t print("线程>>>>",t_dif_t) #0.002962350845336914 print("进程>>>>",p_dif_t) #0.29871106147766113 print("主线程结束")