网络编程 06

通常使用multiprocessing创建进程,父进程只用作进程的创建和回收,不做其他工作。
multiprocessing 进程对象属性
p.start()  启动进程
p.join()   回收进程
p.is_alive()  判断进程生命周期状态 返回True False
p.name  进程名称 默认为Process-1  如果起名字则为自         定义名称
p.pid  创建的进程的PID
p.daemon
默认值为False   父进程退出不会影响子进程运行
如果设置为True 则父进程退出子进程也会退出
* daemon的设置必须在start前
* 如果设置daemon为True 则不再使用join

创建自己的进程类
1. 继承Process类
2. 重写__init__ 并且调用父类的__init__
3. 重写run方法,此时生成对象后 调用start就会自动运    行run
多进程
优点 :  能并行执行多个任务,提高效率
        创建方便,运行独立,不受其他进程影响
 数据安全
缺点 : 进程的创建和删除都需要消耗计算机的资源

进程池技术
产生原因 : 如果有大量任务需要多进程完成,且可能需要频繁的创建和删除进程,给计算机带来大量的资源消耗。
原理 : 在进程池内运行一定数量进程,通过这些进程完成进程池队列中的事件,直到事件执行完毕,减少进程不断的创建删除过程。
实施操作方法:
1. 创建进程池,在进程池中放入适当进程
2. 将事件加入到进程池队列
3. 事件不断运行,直到所有事件运行完毕
4. 关闭进程池,回收进程
from multiprocessing  import  Pool
pool = Pool(processes)
功能 : 创建进程池对象
参数 : 表示进程池中有多少进程
pool.apply_async(func,args,kwds)
功能 : 将事件放入进程池队列
参数 : func  要执行的事件
        args  给func用元组传参
 kwds  给func用字典传参
返回值 : 返回事件对象 通过get()方法获取事件函数返           回值
pool.apply(func,args,kwds)
功能 : 将事件放入进程池队列
参数 : func  要执行的事件
        args  给func用元组传参
 kwds  给func用字典传参
pool.close()
功能 : 关闭进程池,不能再添加新的事件
pool.join()
功能 : 阻塞等待回收进程池
pool.map(func,iter)
功能 : 将要完成的事件放入进程池
参数 : func 要完成的事件函数
        iter 可迭代对象给func传参
返回值 : 事件函数的返回值列表
cookie
获取文件大小
os.path.getsize(path)
功能 : 获取一个文件的大小
参数 : 文件

进程间通信
进程间由于空间独立,资源无法互相直接获取,此时在不同的进程间进行数据传递就需要专门的通信方法
进程间通信方法(IPC)
管道  消息队列   共享内存   信号   信号量  套接字

管道通信   Pipe
管道 : 在内存中开辟一段空间,形成管道结构,管道对多个进程可见,进程可以对管道进行读写操作
multiprocess ---》 Pipe
fd1,fd2 = Pipe(duplex = True)
功能 : 创建一个管道
参数 : 默认为双向管道
        如果设置为False 则为单向管道
返回值 :如果双向管道,fd1 fd2都可以进行读写操作
         如果是单向管道,则fd1 只可读,fd2只可写
fd.recv()
功能 : 从管道读取内容
返回值 : 读到的内容
* 如果管道无内容则阻塞
fd.send(data)
功能: 向管道写入内容
参数: 要发送的内容
* 几乎可以发送所有python支持的数据
消息队列
队列 : 先进先出
在内存中开辟队列结构空间,多个进程可以向队列投放消息,在取出的时候按照存入顺序取出
创建队列
q = Queue(maxsize = 0)
功能 : 创建队列
参数 : maxsize  默认表示根据系统分配空间存储消息
        如果传入一个正整数则表示最多存放多少条消息
返回 : 队列对象
q.put(data,[block,timeout])
功能: 存放消息
参数: data  存入的消息 (python数据类型)
       block  默认为True表示当队列满的时候阻塞
              设置为False则表示非阻塞
       timeout   当block为True表示超时时间
data = q.get([block,timeout])
功能 : 取出消息
参数 : block 默认为True 当队列空时阻塞
              设置为False表示非阻塞
        timeout 当block为True时表示超时时间
返回值 : 返回获取的消息
q.full()   判断队列是否为满
q.empty()  判断队列是否为空
q.qsize()  判断当前队列有多少消息
q.close()  关闭队列

共享内存
在内存中开辟一段空间,存储数据,对多个进程可见。每次写入共享内存中的数据会覆盖之前的内容
from multiprocessing   import Value
obj = Value(ctype,obj)
功能 : 开辟共享内存空间
参数 : ctype   字符串  要转变的c的数据类型
                        对比类型对照表
 obj   共享内存的初始化数据
返回 : 共享内存对象
obj.value  表示共享内存中的值。对其修改或者使用即            可
obj = Array(ctype,obj)
功能: 开辟共享内存
参数: ctype  要转化的c的类型
       obj  要存入共享内存的数据
               列表  将列表存入共享内存,数据类型       一致
     正整数  表示开辟几个数据空间

           管道          消息队列       共享内存
开辟空间   内存          内存           内存
读写方式   两端读写      先进先出    操作覆盖内存
           双向/单向
效率       一般          一般           较快
应用      多用于两端     使用广泛     复杂,需要            通信                      同步互斥机制
         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值