创建进程的多种方式

创建进程的多种方式

但凡是硬件,都需要有操作系统去管理,只要有操作系统,就有进程的概念,就需要有创建进程的方式,一些操作系统只为一个应用程序设计,比如扫地机器人,一旦启动,所有的进程都已经存在

multiprocess模块

  • multiprocess不是一个模块是一个操作、管理进程的包。这个包几乎包含了和进程有关的所有子模块。大致分为四个部分:创建进程部分,进程同步部分,进程池部分,进程之间数据共享

  • Process类介绍

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

    • 方式一
    # 方式一
    from multiprocessing import Process
    import time
    
    def task(name):
        print(f'start...{name}的子进程')
        time.sleep(5)
        print(f'end...{name}的子进程')
    
    if __name__ == '__main__':
        list1 = []
        for line in range(10):
            p_obj = Process(target=task, 
                            args=('tank',))#元组,必须加,号
            p_obj.start()
            list1.append(p_obj)
    
        for obj in list1:
            obj.join()
    
        print('主进程...')
    
    • 方式二
    # 方式二
    from multiprocessing import Process
    import time
    
    class MyProcess(Process):
        def run(self):
            print(f'start...{self.name}的子进程')
            time.sleep(5)
            print(f'end...{self.name}的子进程')
    
    if __name__ == '__main__':
        list1 = []
        for line in range(10):
            p_obj = MyProcess()
            p_obj.start()
            list1.append(p_obj)
    
        for obj in list1:
            obj.join()
        print('主进程...')
    
  • 强调:在Windows操作系统中由于没有fork(linux操作系统中创建进程的机制),在创建子进程的时候会自动 import 启动它的这个文件,而在 import 的时候又执行了整个文件。因此如果将process()直接写在文件中就会无限递归创建子进程报错。所以必须把创建子进程的部分使用if __name__ == '__main__' 判断保护起来,import 的时候 ,就不会递归运行了。

posted @ 2019-12-08 19:03  YGZICO  阅读(808)  评论(0编辑  收藏  举报