参考博客: 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

python3对多线程处理的更多相关文章

  1. Python3.6+pyinstaller+Django

    方案(一)Python3.6+pyinstaller+windows服务 一.Python3.6(64位)环境清单 Django==1.11.7 django-windows-tools==0.2 P ...

  2. python 多线程处理框架

    多线程处理框架 python2.7 python3.5 多线程通用任务处理型驱动框架 probe_type 探测类型rtsp或者http task_queue 任务队列 task_handler 任务 ...

  3. python3  threading初体验

    python3中thread模块已被废弃,不能在使用thread模块,为了兼容性,python3将thread命名为_thread.python3中我们可以使用threading进行代替. threa ...

  4. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

  5. Mac-OSX的Python3.5虚拟环境下安装Opencv

    Mac-OSX的Python3.5虚拟环境下安装Opencv 1   关键词 关键词:Mac,OSX,Python3.5,Virtualenv,Opencv 2   概述 本文是一篇 环境搭建 的基础 ...

  6. Ubuntu部署python3.5的开发和运行环境

    Ubuntu部署python3.5的开发和运行环境 1 概述 由于最近项目全部由python2.x转向 python3.x(使用目前最新的 python3.5.1) ,之前的云主机的的默认python ...

  7. Python3 登陆网页并保持cookie

    网页登陆 网页登陆的原理都是,保持一个sessionid在cookie然后,根据sessionid在服务端找到cookie进行用户识别 python实现 由于python的简单以及丰富的类库是开发网络 ...

  8. 阿里云 SDK python3支持

    最近的一个项目需要操作阿里云的RDS,项目使用python3,让人惊讶的是官方的SDK竟然只支持python2 在阿里云现有SDK上改了改,文件的修改只涉及aliyun/api/base.py,详见h ...

  9. python3爬取1024图片

    这两年python特别火,火到博客园现在也是隔三差五的出现一些python的文章.各种开源软件.各种爬虫算法纷纷开路,作为互联网行业的IT狗自然看的我也是心痒痒,于是趁着这个雾霾横行的周末瞅了两眼,作 ...

随机推荐

  1. Umbraco Examine Search (Lucene.net) french accent

    在项目中使用Umbraco examine search 来search 法语网站时,客户有一个需求,就是 当search  expérience 和 experience 时,需要返回一样的结果. ...

  2. 27.【转载】挖洞技巧:如何绕过URL限制

    大家对URL任意跳转都肯定了解,也知道他的危害,这里我就不细说了,过~ 大家遇到的肯定都是很多基于这样的跳转格式:http://www.xxx.xxx/xxx?xxx=http://www.xxx.x ...

  3. jQuery学习2

    1,jQuery中的$有什么意义. $是 JQuery 常用的一个回传函数. 很多人写jquery代码是这样开始的 $(function(){ // do something }); 事实上它是jqu ...

  4. 解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList问题

    在spring + springmvc + mybatis框架中,我们配置接口对外返回json格式,但是报如下错误: 24-Oct-2017 17:42:23.495 严重 [http-nio-808 ...

  5. C# Collection was modified;enumeration operation may not execute

    一.问题描述 在做 数组.列表.集合遍历时,可能我们会遇见这个问题.Collection was modified;enumeration operation may not execute ,翻译的 ...

  6. neutron负载均衡高可用测试

    对工作中,实验环境的一个小总结 1.创建高可用负载均衡器------创建高可用的时候,添加上ha-mode参数即可 neutron lb-pool-create --lb-method ROUND_R ...

  7. PHP 各个版本的区别

    查看详细内容

  8. explain SQL语句()

    坊间有传言:MySQL性能优化有个神器,叫做explain,它可以对select语句进行分析并且输出详细的select执行过程的详细信息,让开发者从这些信息中获得优化的思路. 下面来讲讲这个MySQL ...

  9. Unity 2018中的图形渲染

    https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247490249&idx=1&sn=d86083e33d9884 ...

  10. static及静态方法

    一.static 1.方法声明中用关键字static修饰的均为类方法或者静态方法,不用static修饰的方法称为实例方法: 2.实例方法可以调用该类中的实例方法或者类方法,类方法只能调用该类的类方法或 ...