zoukankan      html  css  js  c++  java
  • 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()
    

     

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

    创建自己的进程类

  • 相关阅读:
    POJ2778 DNA Sequence AC自动机上dp
    codeforces732F Tourist Reform 边双联通分量
    codeforces786B Legacy 线段树优化建图
    洛谷P3588 PUS 线段树优化建图
    codeforces1301D Time to Run 模拟
    codeforces1303B National Project 二分或直接计算
    codeforces1303C Perfect Keyboard 模拟或判断欧拉路
    codeforces1303D Fill The Bag 二进制应用+贪心
    python之路——使用python操作mysql数据库
    python之路——mysql索引原理
  • 原文地址:https://www.cnblogs.com/sike8/p/11125134.html
Copyright © 2011-2022 走看看