6、多进程执行的不确定性

author:14组开发周博文 欢迎各位老师与同学指导和指正!

  • 默认情况下,多个进程的执行顺序和时间都是不确定的,完全取决于操作系统的调度。
  1. import time
  2. from multiprocessing import Process, current_process
  3. def do_sth():
  4. for i in range(5):
  5. print(f"{i} => {current_process().name}")
  6. time.sleep(2)
  7. def main():
  8. for _ in range(3):
  9. # 创建三个子进程,调用do_sth
  10. Process(target=do_sth).start()
  11. # 父进程直接调用 do_sth
  12. do_sth()
  13. if __name__ == "__main__":
  14. main()
  • 代码中创建三个子进程,调用do_sth 函数,以及父进程直接调用 do_sth 函数,这四个进程会并行的运行,它们会并行的打印出当前进程的名称以及循环序号

image.png

运行结果:

0 => MainProcess 0 => Process-1
0 => Process-2
0 => Process-3
1 => MainProcess 1 => Process-1
1 => Process-3
1 => Process-2
2 => MainProcess 2 => Process-1
2 => Process-2
2 => Process-3
3 => MainProcess 3 => Process-1
3 => Process-3
3 => Process-2
4 => MainProcess 4 => Process-1
4 => Process-3
4 => Process-2

  • 运行结果可以看出,在每次循环中,各个进程的执行顺序是不一样的(可能main - 1 - 2 - 3,也可能1 - 3 - 2 - main),再次证明了多进程执行的不确定性。