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

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

https://blog.csdn.net/caoxinjian423/article/details/83031916
https://blog.csdn.net/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()方法让子进程“插队”了。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用`multiprocessing`模块来创建子进程,并且通过进程间通信(IPC)来实现它们之间的通讯。下面是一个简单的示例: ```python from multiprocessing import Process, Pipe # 定义一个函数作为子进程的任务 def child_task(conn): # 子进程通过连接发送消息给进程 conn.send("Hello from child process!") # 接收进程发送的消息 message = conn.recv() print("Child process received:", message) # 关闭连接 conn.close() if __name__ == '__main__': # 创建一个管道,用于进程间通信 parent_conn, child_conn = Pipe() # 创建子进程,传入管道连接 child_process = Process(target=child_task, args=(child_conn,)) # 启动子进程 child_process.start() # 进程通过连接接收子进程发送的消息 message = parent_conn.recv() print("Parent process received:", message) # 进程通过连接发送消息给子进程 parent_conn.send("Hello from parent process!") # 等待子进程结束 child_process.join() ``` 在上面的示例中,我们使用`Pipe`函数创建了一个双向管道,然后将管道的一端传递给子进程子进程通过连接发送消息给进程,并且接收进程发送的消息。进程也可以通过连接接收子进程发送的消息,并且发送消息给子进程。最后,我们使用`join`方法等待子进程结束。 这只是一个简单的示例,实际上,Python中还有其他的进程间通信方式,如使用`Queue`、`Manager`等。你可以根据具体的需求选择适合的方式来实现进程间通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值