首页 新闻 会员 周边

python多进程 通过for循环 join 的问题

0
[已解决问题] 解决于 2018-08-05 22:41

代码如下:

import os
from multiprocessing import Process
def 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() # start不是运行一个程序,而是调用操作系统的命令,要创建子进程,非阻塞
    p_l.append(p)
  print(p_l)
  for p in p_l :
  p.join() # 阻塞,直到p这个子进程执行完毕之后再继续执行
  print('主进程 的 代码执行结束了')

执行结果如下:

in main 10388 1160
[<Process(Process-1, started)>, <Process(Process-2, started)>, <Process(Process-3, started)>, <Process(Process-4, started)>, <Process(Process-5, started)>, <Process(Process-6, started)>, <Process(Process-7, started)>, <Process(Process-8, started)>, <Process(Process-9, started)>, <Process(Process-10, started)>]
in func 1 5836 10388
in func 0 12936 10388
in func 2 12856 10388
in func 4 13448 10388
in func 5 12516 10388
in func 3 5048 10388
in func 6 6664 10388
in func 7 12916 10388
in func 8 12172 10388
in func 9 6824 10388
主进程 的 代码执行结束了

 

 

问题:

有没有可能在 for 循环 join的时候,比如现在循环到p3.join了,但是p3已经执行完毕了,这时候有没有可能会打印最后那句 print("主进程 的 代码之行结束了")

 

急急急,这个问题想了很久,实在是想不明白了

 
醉自悠然的主页 醉自悠然 | 菜鸟二级 | 园豆:202
提问于:2018-07-29 21:18
< >
分享
最佳答案
0

你都阻塞了。循环没有结束,不能执行后面的

奖励园豆:5
舒碧 | 初学一级 |园豆:169 | 2018-07-29 23:10
其他回答(1)
0

在每一句后面都加个print,可能很清楚的看到运行到了哪里,调试的时候方便。

会发光 | 园豆:258 (菜鸟二级) | 2018-08-01 10:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册