参考博客: https://blog.csdn.net/u010339879/article/details/86506450

https://blog.csdn.net/qq_33961117/article/details/82462745

python线程介绍官网: https://docs.python.org/3/library/threading.html?highlight=threading#

python编程语言里面的任务和线程是很重要的一个功能, 这里面涉及到很多的东西, 具体可以查看上面我参考的博客地址,

这里只写出我个人对python多线程的理解.

先看下面的代码(摘抄其他博客, 同时自己在真实环境运行(我用的是python3.7.3版本)):

import threading
import time def T1_job():
print('T1 start')
for i in range(10):
print('begin sleep 0.1s')
time.sleep(0.1)
print('T1 finish') def T2_job():
print('T2 start')
print('T2 finish') def main():
print('---main begin----')
t1 = threading.Thread(target=T1_job, name='T1')
t2 = threading.Thread(target=T2_job, name='T2')
t1.start()
t2.start()
print('---main end----') if __name__ == '__main__':
main() 运行结果如下:
---main begin----
---main end----
T2 start
T1 start
begin sleep 0.1s
T2 finish
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
T1 finish

主线程,main 很快就结束了, 子线程 T2先开始,然后 T1开始, T2很快就完成任务了, 然后经过漫长的等待最后也完成任务了. 这是没有用join 的情况. 即使 主线程main 停止了, 两个子线程 并不会直接退出. 而是要把自己各自的任务完成, 才会退出.

不知道T1还是T2先运行,代码里写的是T1开始, 但是打印出Log是T2先开始, 这可能和线程执行的任务多少有关系吧(个人理解),具体原因可能就是多线程造成的.

这里通过join ,可以让线程在这里等着,阻塞在这里,等线程跑完了

join 有一个参数 timeout 意思是等待时间, 如果超过等待的时间, 任务还没有完成那就不等待了,直接继续跑下面的代码.
如果任务 完成的时候, 没有超过等待时间, 那么就正常往下跑.

timeout 是一个float number 单位是秒

看下面的代码测试, 使用join来等待线程:

import threading
import time def T1_job():
print('T1 start')
for i in range(10):
print('begin sleep 0.5s')
time.sleep(0.5)
print('T1 finish') def T2_job():
print('T2 start')
print('T2 finish') def main():
print('---main begin----')
t1 = threading.Thread(target=T1_job, name='T1')
t2 = threading.Thread(target=T2_job, name='T2')
t1.start()
t2.start() t1.join(timeout=3)
print("t1 done") t2.join()
print("t2 done")
print('---main end----')
运行结果如下:
---main begin----
T1 start
begin sleep 0.5s
T2 start
T2 finish
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
t1 done # t1 继续往下跑
t2 done
---main end----
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
T1 finish

最新文章

  1. 数据结构快速回顾——平衡二叉树 AVL (转)
  2. primace 5.0软件的Debug ware 功能的使用方法简介
  3. C#线程状态简析
  4. iOS URL中汉字的编码和解码
  5. vim 高级使用技巧
  6. 几个app maker的网站
  7. 使用iOS8 WKWebView的浏览器模块,脉冲动画层-b
  8. 安卓自定义控件(二)BitmapShader、ShapeDrawable、Shape
  9. Java并发编程笔记1-竞争条件&初识原子类&可重入锁
  10. Neo4j 安装插件APOC和GRAPH ALGORITHMS
  11. vue keep-alive解决关闭标签动态缓存问题
  12. mysql复杂查询1
  13. poj1733(带权并查集+离散化)
  14. SQL基础用法(实例二)
  15. SpringBoot application.yml logback.xml 多环境
  16. python学习(十八)爬虫中加入cookie
  17. Kubernetes 1.5集成heapster
  18. IPV6设置
  19. Dubbo基础篇-zookeeper安装(单点)
  20. C语言函数重入

热门文章

  1. tensorflow placeholder
  2. linux中制作动态库
  3. cygwin主要命令
  4. C# 绘制图表(柱状图,线性图,饼状图)
  5. C# Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
  6. SAS笔记(6) PROC MEANS和PROC FREQ
  7. xcode定期清理记录一下
  8. Codeforces Round #363 (Div. 2) C
  9. myeclipse 上安装 Maven
  10. @GeneratorValue与@GenericGenerator注解使用心得