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