multiprocessing

 

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()

 

==============================

创建自己的进程类

 

posted @ 2019-07-04 15:30  sike8  阅读(157)  评论(0编辑  收藏  举报