t1.join() t2.join()?

t1.join() t2.join()?

t1.join(), t2.join() 这两行代码是什么意思

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小猿 2022-07-12 18:01:57

同学,你好!t1.join(),t2.join()是阻塞主进程,等子进程结束后再执行主进程。如下图在t1.join(),t2.join()子进程结束后再执行主进程的print("主进程结束啦")代码。

import time
import random
import multiprocessing
def sender(q):
    for i in range(1,10):
       x=random.randint(1,10)
       print("send done:",x)
       q.put(x)
       time.sleep(1)
def recvder(q):
    for i in range(1,10):
        x=q.get()
        print("recv done:",x*3.14)
        time.sleep(1)
        i+=1
if __name__ == '__main__':
    q = multiprocessing.Queue()
    t1 = multiprocessing.Process(target=sender, args=(q,))
    t2 = multiprocessing.Process(target=recvder, args=(q,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print("主进程结束啦")

运行结果如图:
https://img1.sycdn.imooc.com//climg/62cd468e091e792a03710611.jpg
祝学习愉快~

  • 提问者 慕先生1375090 #1

    t1.join() 在 t2.join()前面,为什么不是先执行完t1再执行t2

    2022-07-12 20:19:32
  • 好帮手慕小猿 回复 提问者 慕先生1375090 #2

    同学,你好!两个进程在启动后是并行执行的,在sender()中存入数据后使用了sleep( )使程序暂时停止,此时recvder()方法中的get()可以从队列中取到数据,执行到time.sleep()后程序暂停,sender()存入数据后recvder()取数据,两个进程中暂停时间是一样的,因此是交替执行,而不是先执行完t1,再执行t2。祝学习愉快~

    2022-07-13 10:58:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师