(3)进程的创建
分类:
IT文章
•
2024-04-03 09:56:07
创建子进程的三种方式:
(一)只能在linux运行,windows不行
# import os
# os.fork()
# print(os.getpid())
(二)for 循环,创建指定个数的的子进程
from multiprocessing import Process
def func(index):
print("第%s封邮件已经发送" % (index))
if __name__ == '__main__': # 作为主程序运行
for i in range(10): #创建10个子进程
p = Process(target=func,args=(i,)) # args给进程函数传参,必须是元组
p.start() #开启子进程
View Code
执行结果:
第1封邮件已经发送
第0封邮件已经发送
第3封邮件已经发送
第2封邮件已经发送
第5封邮件已经发送
第4封邮件已经发送
第6封邮件已经发送
第7封邮件已经发送
第8封邮件已经发送
第9封邮件已经发送
View Code
(三)自己定义一个类,继承Process类
(1)无参
from multiprocessing import Process
import os
class MyProcess(Process):
# 必须使用run方法,规定这样写
def run(self):
print("子进程: 参数:",os.getpid(),os.getppid()) # 获取子进程id号和主进程id号
if __name__ == '__main__':
MyProcess().start()
print('主进程:',os.getpid())
View Code
# 执行结果:因为没有阻塞,由于cpu的自行调度,主进程运行得更快
主进程: 7068
子进程: 参数: 4376 7068
View Code
import os
from multiprocessing import Process
class Myprocess(Process): # 自定义一个类继承父类Process
def __init__(self, arg):
super().__init__() # 调用父类的构造方法
self.arg = arg
def run(self): # 自动调用run方法
print("子进程: 参数:", os.getpid(), os.getppid(), self.arg)
if __name__ == '__main__':
lis = []
for i in range(10):
p = Myprocess('参数%s' % (i))
p.start()
lis.append(p)
for p in lis:
p.join() # 添加阻塞,让子进程先执行完,主程序最后执行
print("主进程", os.getpid())