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

     

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

    创建自己的进程类

  • 相关阅读:
    分布式发布订阅消息系统 Kafka 架构设计[转]
    KAFKA分布式消息系统[转]
    文本协议与二进制协议的选择
    实现程序的热升级
    实现程序的热升级
    一个Socket数据处理模型
    关于GC进行垃圾回收的时机
    多线程
    线程同步(AutoResetEvent与ManualResetEvent)
    异步
  • 原文地址:https://www.cnblogs.com/sike8/p/11125134.html
Copyright © 2011-2022 走看看