多进程的实现

#导入多进程模块
import multiprocessing
import os
import time

def sing():
    for i in range(5):
        print("正在唱歌.....")
        print(f"子进程1的名称是:{multiprocessing.current_process().name},id是:{multiprocessing.current_process().pid}")
        #获取当前的进程id使用os.getpid(),获得当前进程的父进程的进程id使用os.getppid()
        print(os.getpid(),os.getppid())
        #暂停0.1秒,开始下一子进程
        time.sleep(0.1)

def dance():
    for i in range(5):
        print("正在跳舞.....")
        print(f"子进程2的名称是:{multiprocessing.current_process().name},id是:{multiprocessing.current_process().pid}")
        print(os.getpid(), os.getppid())
        time.sleep(0.1)


if __name__ == '__main__':
    print(f"主进程的名称是:{multiprocessing.current_process().name},id是:{multiprocessing.current_process().pid}")
    print(os.getpid(), os.getppid())
    #创建一个进程p1
    p1 = multiprocessing.Process(target=sing)
    #创建一个进程p2
    p2 = multiprocessing.Process(target=dance)
    #启动进程p1
    p1.start()
    #启动进程p2
    p2.start()
    #通过添加join方法能够让p1运行完,主进程才能运行完
    p1.join()

下面主要就是代码的运行结果,也可以自己尝试下p2.join(),加入到代码中,这样就可以最后执行进程start之后的主进程代码,否则主进程代码可能会先一步执行完成。
在这里插入图片描述

接下来开始说明子进程如何随着主进程的结束而结束呢?一般来说,提前结束子进程的常见方法有两种,一种是通过设置子进程对象的daemon = True,就是守护主进程,还一种就是将子进程进行terminate(),然后exit(),具体实现如下:

import multiprocessing
import sys
import time

def func():
    for i in range(5):
        print(i)
        time.sleep(0.5)
    print("子进程结束啦!")


if __name__ == '__main__':
    #创建子进程
    p1 = multiprocessing.Process(target=func)
    #设置守护主进程
    p1.daemon = True
    p1.start()
    time.sleep(1)
    print(f"主进程{multiprocessing.current_process().name}结束啦!")
    # #子进程随着主进程的结束而结束
    # p1.terminate()
    # exit()
    sys.exit()

运行结果如下:
在这里插入图片描述
子进程没有打印完,整个程序就结束了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值