两种方式都是利用multiprocessing模块导入Process类来实现具体方法看代码

第一种:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
from multiprocessing import Process
import time


# 创建的子程序代码
def task(name):
    print('%s is running' % name)
    time.sleep(2)
    print('%s is over' % name)

# 注意,在windows系统中,创建进程会将代码以模块的方式从头到尾加载一遍
# 一定要写在if __name__ == '__main__':代码块里面
# 强调:函数名一旦加括号,执行优先级最高,立刻执行
# 主程序
if __name__ == '__main__':
    p1 = Process(target=task, args=('egon', ))
    p1.start()    # 告诉操作系统创建一个进程
    print('主程序打印打印')

第二种:

from multiprocessing import Process
import time

class MyProcess(Process):

    def __init__(self, name):
        super().__init__()
        self.name = name

    # 必须写run方法
    def run(self):
        print('%s is running' % self.name)
        time.sleep(1)
        print('%s is end' % self.name)

if __name__ == '__main__':
    obj = MyProcess('egon')
    obj.start()
    print('主程序')

两种方法其实过程大致相同,实现方式略微有点差别

结果都是:

主进程正在运行
egon is running!
egon is end! 

子进程对象.start()方法:向操作系统发出请求:说我要创建个子进程了,快帮我搞一个。

此时start处的代码相当于异步继续向下执行,执行速度肯定会快于操作系统收到请求然后选择性的创建子进程,所以主程序执行完了,子进程的代码才开始执行。

要想让子进程先执行,然后执行下面的主程序的话,可以在子进程下面来个.join(),意思是你子进程先走,我等你搞定了我再进行接下来的主进程代码!

from multiprocessing import Process
import time

def task(name):
    print('%s is running!' % name)
    time.sleep(2)
    print('%s is end!' %name)

if __name__ == '__main__':
    p = Process(target=task, args=('egon', ))
    p.start()
    p.join()
    print('主进程继续运行')

# 结果
egon is running!
egon is end!
主进程正在运行

一次性创建多个子程序:

from multiprocessing import Process
import time

def task(name):
    print('%s正在运行。。。。。' %name)
    time.sleep(2)
    print('%s运行结束。。。。。' %name)


if __name__ == '__main__':
    p_list = []
    for i in range(1,4):
        p = Process(target=task, args=('进程[%s]' % i, ))
        p.start()
        p_list.append(p)
    for n in p_list:
        n.join()
    print('主进程继续进行!')

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄