zoukankan      html  css  js  c++  java
  • 创建进程的方式

    创建进程的多种方式

    multiprocess模块

    multiprocess是python中一个操作、管理进程的包。

    Process类介绍

    Process(group , target , name , args , kwargs),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动)
    
    强调:
    1. 需要使用关键字的方式来指定参数
    2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号
    
    参数介绍:
    1 group参数未使用,值始终为None
    2 target表示调用对象,即子进程要执行的任务
    3 args表示调用对象的位置参数元组,args=(1,2,'kkk',)
    4 kwargs表示调用对象的字典,kwargs={'name':'kkk','age':18}
    5 name为子进程的名称
    

    Process类创建进程的两种方式

    #开进程的方法一:
    import time
    import random
    from multiprocessing import Process
    
    def piao(name):
        print('%s piaoing' %name)
        time.sleep(random.randrange(1,5))
        print('%s piao end' %name)
    
    if __name__ == '__main__':
    		p1=Process(target=piao,args=('kkk',)) #必须加,号
    		p2=Process(target=piao,args=('ttt',))
    		p3=Process(target=piao,args=('aaa',))
    		p4=Process(target=piao,args=('bbb',))
    
    		p1.start()
    		p2.start()
    		p3.start()
    		p4.start()
    		print('主线程')
    
            
    #开进程的方法二:
    import time
    import random
    from multiprocessing import Process
    
    class Piao(Process):
        def __init__(self,name):
            super().__init__()
            self.name=name
            
        def run(self):
            print('%s piaoing' %self.name)
            time.sleep(random.randrange(1,5))
            print('%s piao end' %self.name)
            
    if __name__ == '__main__':
    		p1=Piao('ttt')
    		p2=Piao('aaa')
    		p3=Piao('bbb')
    		p4=Piao('ccc')
    		p1.start() #start会自动调用run
    		p2.start()
    		p3.start()
    		p4.start()
    		print('主线程')
    

    进程中的其他知识

    进程间数据隔离

    	进程隔离是为了保护操作系统中进程互不干扰而设计的一组不同硬件和软件的技术。
    	这个技术是为了避免进程A写入进程B的情况发生。进程的隔离实现,使用了虚拟地址空间,进程A的虚拟地址和进程B的虚拟地址不同,这样就防止进程A将数据信息写入进程B。
    
    # 代码验证
    from multiprocessing import Process
    
    n = 66
    
    def work():
        global n
        n = 100
        print('子进程:', n)
    
    if __name__ == '__main__':
        p = Process(target=work)
        p.start()
        print('主进程:', n) 
    # 主进程: 66
    # 子进程: 100
    

    守护进程

    ​ 会随着主进程的结束而结束

    • 主进程创建守护进程
    import os
    import time
    from multiprocessing import Process
    
    class MyProcess(Process):
        def __init__(self, person):
            super().__init__()
            self.person = person
    
        def run(self):
            print(os.getpid(), self.name)
            print('%s正在编写代码。'%self.person)
    
    if __name__ == '__main__':
        p = MyProcess('zkim')
        
        # 一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行
        p.daemon = True
        p.start()
        
        # 在sleep时查看进程id对应的进程ps -ef|grep id
        time.sleep(5)
        print('主')
    
    千里之行,始于足下。
  • 相关阅读:
    第 2 章 MySQL 架构组成
    MySql学习笔记
    大型项目成功的关键
    内连接区别外连接
    UML2.0
    软件架构师之路
    UVA
    ZOJ
    UVA
    UVA
  • 原文地址:https://www.cnblogs.com/jincoco/p/12935915.html
Copyright © 2011-2022 走看看