创建进程的多种方式
但凡是硬件,都需要有操作系统去管理,只要有操作系统,就有进程的概念,就需要有创建进程的方式,一些操作系统只为一个应用程序设计,比如扫地机器人,一旦启动,所有的进程都已经存在
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 的时候 ,就不会递归运行了。