multiprocessing 模块创建进程
1、需要将事件封装为函数
2,使用multiprocssing提供的类创建新进程
3、新的进程和对应的函数相关联,进程启动会自动执行函数,完成事件
4、进程回收
进程对象属性函数
p.start()
功能:启动子进程 此时进程真正创建
p.join([timeout])
功能:阻塞等待回收相应的子进程
参数:默认为阻塞,timeout为超时时间
p的其他属性
p.name 进程名称
p.pid 创建的进程的PID号
p.is_alive()进程状态
当启动的进程比较多的情况时,可以采取迭代的方法来操作:
things=[th1,th2,th3]
process=[]
for th in things:
p=mp.Process(target=th)
processs.append(p)
p.start()
for i in process;
i.join()
===========================================================
p.daemon
默认值为False 表示主进程结束后,不影响子进程的执行;如果设置为True,则主进程执行完毕,所有的子进程一同退出
*设置必须在start()前
*一般使用daemon=True后,不用再加join
*该属性并不是LINUX/UNIX系统中所说的守护进程设置(虽然英文名字是守护的意思)
守护进程:生命周期长,随系统创建随系统销毁;
不受前端控制,后台运行;
操作系统进程或者自动化运行进程居多
****************************************************************************
当多个子进程操作一个文件流时,会出现操作混乱
*****************************************************************************
import multiprocessing as mp import os from time import sleep #获取要复制文件的SIZE f_size=os.path.getsize('/home/yangrui/num6/10.jpg') #计算出文件一半的SIZE print('+'*50) def read1(): f_read=open('/home/yangrui/num6/10.jpg','rb') f_write=open('/home/yangrui/num6/20.jpg','wb') print("starting read1....") n=f_size//2 while True: if n<64: data=f_read.read(n) f_write.write(data) break data=f_read.read(64) f_write.write(data) n-=64 f_write.close() def read2(): f_read2=open('/home/yangrui/num6/10.jpg','rb') f_write2=open('/home/yangrui/num6/30.jpg','wb') print("starting read2....") f_read2.seek(f_size//2,0) while True: f=f_read2.read(1) if not f: break f_write2.write(f) #显示新文件的SIZE #创建3个进程,read1读取文件前半部分,read2读取后半部分 p1=mp.Process(target=read1) p2=mp.Process(target=read2) p1.start() p2.start() p1.join() p2.join()
==============================
创建自己的进程类