python并发编程之多进程(实现)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python并发编程之多进程(实现),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2160字,纯文字阅读大概需要4分钟。
内容图文
![python并发编程之多进程(实现)](/upload/InfoBanner/zyjiaocheng/1259/c6f7efb14bf94fbeb6b8e1ccd31585f1.jpg)
一、multipricessing模块的介绍
python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiprocessing模块
multiprocessing模块用来开启子进程,并在子进程中执行我们的任务(比如函数),该模块与多线程模块threading类的编程接口类似。
multiprocessing模块的功能众多:支持子进程、通信和共享数据,执行不同形式的同步,提供了Process类,Queue类,Pipe类,Lock类等组件
二、Process模块的介绍
基本格式:
1 from multiprocessing import Process #导入模块23def func(x): #定义一个函数(等待开一个新线程执行的函数)4print(x) 56if__name__ == ‘__main__‘: #windows下一定要加上这句话才能运行7 p = Process(target=func,args=(‘传参‘,)) #实例化一个进程,将函数名作为参数传递,将需要传给函数的参数(元组形式)传递8 p.start() #(通知操作系统)开启此进程
通过类的方式调用:
from multiprocessing import Process #调用模块class MyProcess(Process): #定义一个类,必须要继承Process类def__init__(self,name): #如果需要参数,一定要有init方法 super().__init__() #如果有init方法,一定要调用父类的init方法 self.name = name def run(self): #一定要实现一个run方法来重写父类的runprint(‘子进程%s已开启‘%self.name) if__name__ == ‘__main__‘: p = MyProcess(‘aaa‘) #实例化一个自定义类的对象 p.start() #开启进行
参数介绍:
target表示调用对象,既子进程要执行的任务 args表示调用对象的位置参数元组,如:args=(1,)或者args=(1,2) kwargs表示调用对象的字典,如:kwargs={‘name‘:‘fuyong‘}
方法介绍:
p.start() 启动进程,并且调用该子进程的run()方法
p.run() 进程启动时运行的方法,正式它去调用target指定的函数,我们自定义类的话一定要实现该方法
P.terminate()强制终止程序p,不会进行任何清理操作,如果p创建了子进程,那么该子进程就成了‘僵尸进程
使用此方法时要特别小心,如果p还保留了一个锁,那么锁也不会被释放,进而导致了死锁
p.is_alive() 判断p是否还在运行,在运行返回True
p.join() 如果加上此方法,那么主线程将等着此线程运行完毕之后才会运行
属性介绍:
p.daemon 默认值为False,如果设置为True,则代表后台运行的守护进程,当p的父进程终止时,p也会随之终止
p.name 进程名
p.pid 进程的pid
三、守护进程
主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children 注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止 设置守护进程的方法: p.daemon = True p.daemon 默认值为False,如果设置为True,则代表后台运行的守护进程,当p的父进程终止时,p也会随之终止
五、进程同步(锁)
进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,
而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理
加锁方式:
1、导入Lock类
2、实例化一个锁 lock = Lock()
3、将lock作为参数传给子进程函数
4、函数在需要枷锁的代码前加上lock.acquire()方法,在需要释放锁的地方加上lock.release()方法
六、队列
进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的
from multiprocessing import Queue q = Queue(3) #限制最多放3个 如果超过3个则会堵塞,需要等待拿出去1个之后才能继续放 q.put(1) #放数据(可以放任何数据类型) q.put(2) #放数据(可以放任何数据类型) q.put(3) #放数据(可以放任何数据类型)print(q.get()) #拿数据print(q.get()) #拿数据print(q.get()) #拿数据
原文:https://www.cnblogs.com/fu-yong/p/8412654.html
内容总结
以上是互联网集市为您收集整理的python并发编程之多进程(实现)全部内容,希望文章能够帮你解决python并发编程之多进程(实现)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。