queue python
python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiprocessing模块
multiprocessing模块用来开启子进程,并在子进程中执行我们的任务(比如函数),该模块与多线程模块threading类的编程接口类似。queue python
multiprocessing模块的功能众多:支持子进程、通信和共享数据,执行不同形式的同步,提供了Process类,Queue类,Pipe类,Lock类等组件
基本格式:
通过类的方式调用:
from multiprocessing import Process #调用模块
class MyProcess(Process): #定义一个类,必须要继承Process类
def __init__(self,name): #如果需要参数,一定要有init方法
super().__init__() #如果有init方法,一定要调用父类的init方法
self.name = name
def run(self): #一定要实现一个run方法来重写父类的run
print(‘子进程%s已开启‘%self.name)
if __name__ == ‘__main__‘:
p = MyProcess(‘aaa‘) #实例化一个自定义类的对象
p.start() #开启进行
参数介绍:
方法介绍:
属性介绍:
主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常: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()) #拿数据
python并发编程中的多进程(代码实现)
标签:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-65113-1.html
我们的海军和空军以及二炮部队可以现在举办南海实弹军事联合演习
那小辫子
太不理智了