7、多线程执行的不确定性

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

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

image.png

运行结果:

0 => Thread-1
0 => Thread-2
0 => Thread-3
0 => MainThread 1 => Thread-1
1 => MainThread 1 => Thread-3
1 => Thread-2
2 => MainThread 2 => Thread-1
2 => Thread-2
2 => Thread-3
3 => MainThread 3 => Thread-1
3 => Thread-3
3 => Thread-2
4 => MainThread 4 => Thread-1
4 => Thread-2
4 => Thread-3

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