活动地址:CSDN21天学习挑战赛
1,学习知识点
一、什么是多进程?
1.进程
程序:例如xxx.py这是程序,是一个静态的
进程:一个程序运行起来后,代码+用到的资源称之为进程,它是操作系统分配资源的基本单元。不仅可以通过线程完成多任务,进程也是可以的
2.进程的状态
工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态
二、进程的创建-multiprocessing
1.Process类
multiprocessing模块通过创建一个Process对象然后调用它的start()方法来生成进程,Process与threading.Thread API相同。
语法格式:multiprocessing.Process(group=None,target=None,name=None,args=(), kwargs={},*,daemon=None)
参数说明:
group︰指定进程组,大多数情况下用不到
target:如果传递了函数的引用,可以任务这个子进程就执行这里的代码
name:给进程设定一个名字,可以不设定
args : 给target指定的函数传递的参数,以元组的方式传递
kwargs :给target指定的函数传递命名参数
2,学习的收获
进程之间可以使用Queue来进行同步,而为了防止多进程之间出现访问错误,通常还会使用锁Lock:
锁是为了确保数据一致性。比如读写锁,每个进程给一个变量增加1,但是如果在一个进程读取但还没有写入的时候,另外的进程也同时读取了,并写入该值,则最后写入的值是错误的,这时候就需要加锁来保持数据一致性。
通过使用Lock来控制一段代码在同一时间只能被一个进程执行。Lock对家的网个万法,acqulre()用米状取锁,release()用来释放锁。当一个进程调用acquire()时,如果锁的状态为unlocked,那么会立即修改为locked并返回,这时该进程即获得了锁。如果锁的状态为locked,那么调用acquire()的进程则阻塞。