(3)进程的创建

 

创建子进程的三种方式:

(一)只能在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

(2) 有参

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())
View Code

执行结果:

子进程: 参数: 6808 6548 参数1
子进程: 参数: 7088 6548 参数0
子进程: 参数: 6940 6548 参数3
子进程: 参数: 2220 6548 参数5
子进程: 参数: 6580 6548 参数2
子进程: 参数: 6488 6548 参数4
子进程: 参数: 6828 6548 参数6
子进程: 参数: 6620 6548 参数7
子进程: 参数: 1844 6548 参数8
子进程: 参数: 6736 6548 参数9
主进程 6548
View Code

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/lyj910313/p/10787150.html