多任务
进程 multiprocessing
进程是需要操作系统进行分配资源的
格式 multiprocessing.Process(target=函数名,args =(),kwargs={*"=*"}.start()
守护线程格式:multiprocessing.Process(target=函数名,daemon=True).start()
进程 不共享全局变量,主进程等待所有子进程结束后结束
jion() :等待子进程结束
os.getpid():当前进程号
os.getppid():当前父进程编号
子进程对象.terminate():销毁子线程
线程 threading
线程是需要cpu进行调度的
线程之间是无序的,线程之间共享全局变量
线程之间全阿菊变量出现gil问题(全局解释器锁) 使我们的进程中的线程效率无法提到最高
格式 threading.Thread(target=函数名,args =(),kwargs={*"=*"}.start()
守护线程格式:threading.Thread(target=函数名,daemon = True).start()
协程 gevent
gevent 是第三方库
特点,用代码按循序进行切换
请猴子打补丁:
from gevent import monkey
monkey.patch_all()
这样time函数就能使用了
格式 :
gevent.spawn(函数名,参数)
gevent.joinall()
互斥锁 threading.Lock()
格式:变量名 = threading.Lock()
死锁: 一直等待对方释放锁的情景就是死锁
一个进程一把锁
并行与并发
并行是真正意义上的同时运行 , cpu数大于等于任务数
并发看似同时发生其实cpu进行切换 cpu数小于任务数
当两个程序在一个cpu上执行的时候就是并发
进程、线程、协程之间的对比
单位:进程是操作系统分配资源的单位,线程是cpu调度的单位
资源大小: 进程>线程>协程

浙公网安备 33010602011771号