多线程
进程
程序:是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念
进程:处理机制上的一次执行过程,他是一个动态的概念
状态:就绪态、运行态、阻塞态
CPU(4核)可以同时执行4个线程
线程
进程中包含若干个线程,进程作为分配资源的基本单位,线程作为独立运行和独立调度的基本单位
多线程
程序执行时,程序本身就是主线程,手动创建的叫子线程,他们的关系是父子进程
import threading import time def run1(name): while(True): print(name,"**") time.sleep(1) def run2(name): while(True): print(name,"===") time.sleep(3) #创建线程 t1=threading.Thread(target=run1,args=("t1",)) t2=threading.Thread(target=run2,args=("t2",)) t1.start() #启动线程 t2.start() # 11.4 t1.join() #阻塞等待t1结束并回收资源 t2.join() #阻塞等待t2结束并回收资源
线程锁
保护共享资源
import threading import time lock=threading.Lock() #创建一个线程锁 num=100 def run(name): global num #设置num为全局变量,只能放在里面 while(True): lock.acquire() #上锁 if(num==0): break num=num-1 print("线程",name,"目前num:",num) lock.release() #释放锁 time.sleep(1) #创建线程 for i in range(5): t=threading.Thread(target=run,args=(i+1,)) t.start()
多进程
if __name__ == '__main__': __name__变量为'__main__'时才执行,本文件时成立,当被作为模块引入时不成立
from multiprocessing import Process import time def run(name): print("进程",name,"执行了") time.sleep(5) #创建进程 if __name__ == '__main__': #windows进程要写在里面 p1=Process(target=run,args=("p1",)) p2=Process(target=run,args=("p2",)) p1.start() p2.start()