Python父子进程执行的先后顺序

在看多进程知识时碰到一个小问题,自己跑了一下两个博主的代码才弄懂

https://blog.youkuaiyun.com/caoxinjian423/article/details/83031916
https://blog.youkuaiyun.com/miaoqinian/article/details/80062740

e.g.1

#!/usr/bin/env python
# coding:UTF-8

from multiprocessing import Process
from time import sleep
 
def run():
    print("子进程启动")
    sleep(3)
    print("子进程结束")
 
if __name__ == "__main__":
    print("父进程启动")
    p = Process(target=run)
    p.start()
    #父进程的结束不影响子进程,join()可以让父进程等待子进程结束再执行父进程
    p.join()
    sleep(1)
 
    print("父进程结束")

运行结果:
父子进程执行顺序
这个理解起来很容易。

e.g.2

from multiprocessing import Process
import time
 
def test(name):
    print("%s is running "% name)
    time.sleep(2)
    print('%s is done'%name)
 
if __name__ == '__main__':
    #在windows系统之上,开启子进程的操作一定要放在这下面
    # Process(target=test,kwargs={'name':'monicx'})
    p=Process(target=test,args=('monicx',))
    p.start()#向操作系统发送一个请求,操作系统会申请内存空间给,然后把父进程的数据拷贝给子进程,作为子进程的初始数据。
    print('=======主')

运行结果:
父子进程执行顺序
我就很奇怪第二个例子为什么不是先执行p.start()输出子进程内容,毕竟因为主进程内容在它之后。看了两个例子的区别,发现了两个例子的区别:e.g.1中多了一句p.join(),而e.g.2没有,于是在e.g.2中主进程之前加入p.join()之后,运行结果
父子进程运行顺序
process类的方法:
join(timeout):让主线程等待某一子进程结束,才继续执行主进程。timeout是可选的超时时间。超过一个时间主进程就不等待了。
故e.g.1中p.join()方法让子进程“插队”了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值