多进程 for 循环中如何保证所有子进程完成再执行主进程代码?

多进程 for 循环中如何保证所有子进程完成再执行主进程代码?

多进程中的 for 循环 join 机制

python的多进程中提供了 join 方法来等待子进程完成。在 for 循环中 join 进程时,存在一种情况,即当循环到第 n 个进程时,如果第 n 个进程已经执行完毕,那么此时可能打印出主进程结束的语句,而不是继续等待剩余进程完成。

解决方法

这个问题产生于 for 循环的非阻塞特性。当 start 方法调用时,子进程并没有被运行,而是创建了一个子进程对象。随后 for 循环会持续执行,循环到第 n 个进程时,第 n 个进程可能已经执行完毕,但此时尚未执行 join,所以 join 方法并不会阻塞。如果在 for 循环内打印主进程结束的语句,则可能会执行该语句,而不会等待剩余进程完成。

解决这一问题的方法是,在 for 循环内立即执行 join 方法,确保在循环到第 n 个进程时,该进程已经完成执行,然后才执行主进程的后续代码。修改后的代码如下:

import osfrom multiprocessing import Processdef func(num):    print('in func', num, os.getpid(), os.getppid())if __name__ == '__main__':    print('in main', os.getpid(), os.getppid())    p_l = []    for i in range(10):        p = Process(target=func, args=(i,))        p.start()        p_l.append(p)    for p in p_l:        p.join()    print('主进程 的 代码执行结束了')

在修改后的代码中,for 循环内立即执行 join,确保在循环到第 n 个进程时,该进程已经完成执行,再执行主进程的后续代码。因此,将不会打印主进程结束的语句,而是等待所有进程执行完毕后再打印。

以上就是多进程 for 循环中如何保证所有子进程完成再执行主进程代码?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1350701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 15:18:33
下一篇 2025年12月13日 15:18:44

相关推荐

发表回复

登录后才能评论
关注微信