python 线程thread详解
join详解
看到代码示例时,都会出现一个join,这个作用如何?先看结论
阻塞主程序,专注于执行多线程中的程序
多线程多join的情况下,依次执行各线程的join方法,子线程全部结束了才能执行主线程。
join无入参,则等待到该执行绪结束,才开始执行下一个线程的join。
入参timeout为线程的阻塞时间,如timeout=2 就是按照着这个线程2s 以后,就不管他了,继续执行下面的程序。
观察下面的代码,
import threading, timedef worker(interval):print("worker start at "+time.strftime('%H:%M:%S'))time.sleep(interval)print('finish worker, ',time.strftime('%H:%M:%S'))def master(interval):print("master start at "+time.strftime('%H:%M:%S'))time.sleep(interval)print('finish master, ', time.strftime('%H:%M:%S'))if __name__ == '__main__':ts = []t1 = threading.Thread(target=worker, args=(3,))t2 = threading.Thread(target=master, args=(5,))ts.append(t1)ts.append(t2)t2.start()t1.start()print('End main thread, '+time.strftime('%H:%M:%S'))
代码里没有join时,上述有起了三个线程,分别是main,t1,t2,他们会各自同时并发执行各自的代码
master start at 16:29:08
worker start at 16:29:08
End main thread, 16:29:08
finish worker, 16:29:11
finish master, 16:29:13
如果我们加上join,原本各自为政的三个线程,就有了秩序
import threading, timedef worker(interval):print("worker start at "+time.strftime('%H:%M:%S'))time.sleep(interval)print('finish worker, ',time.strftime('%H:%M:%S'))
def master(interval):print("master start at "+time.strftime('%H:%M:%S'))time.sleep(interval)print('finish master, ', time.strftime('%H:%M:%S'))if __name__ == '__main__':ts = []t1 = threading.Thread(target=worker, args=(3,))t2 = threading.Thread(target=master, args=(5,))ts.append(t1)ts.append(t2)t2.start()t1.start()for thread in ts:thread.join()print('End main thread, '+time.strftime('%H:%M:%S'))
master start at 16:32:43
worker start at 16:32:43
finish worker, 16:32:46
finish master, 16:32:48
End main thread, 16:32:48
main线程只有当所有子线程完成后才能执行,StackOverflow里有段很好的总结:
If, for example, you want to concurrently download a bunch of pages to concatenate them into a single large page, you may start concurrent downloads using threads, but need to wait until the last page/thread is finished before you start assembling a single page out of many. That’s when you use join().
那如果join()里带了参数呢?此时的子线程表示主线程你只要最多等我多长时间,你就可以自便了,这里参数改为join(2):
master start at 16:35:42
worker start at 16:35:42
finish worker, 16:35:45
End main thread, 16:35:46
finish master, 16:35:47
可以看到main线程等了4秒,就管自己执行后续的代码了,而main最后才完成自己的程序,这里为何是四秒?因为两个线程分别都告诉了主线程等他2秒,总共4秒,你也可以拆开,让每个线程join不同的时间
Python 多執行緒 thread join() 的作用
python 线程thread详解相关推荐
- Java核心(一)线程Thread详解
一.概述 在开始学习Thread之前,我们先来了解一下 线程和进程之间的关系: 线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位. 线程不能够独立执行,必须依存在应用程序中,由应用程 ...
- python time模块详解
python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明 一.简 ...
- python嗅探工具详解附源码(使用socket,带tkinter界面)
python嗅探工具详解(带tkinter界面) 点击详见原理 点击详见原理 TCP/IP协议号补充 必备基础知识 IP数据包格式 详见点此 TCP报文格式 详见点此 struct模块 在Python ...
- Python开发技术详解
Python开发技术详解 下载地址 https://pan.baidu.com/s/1KTrk3B1sajMiPIoo3-Rhuw 扫码下面二维码关注公众号回复 100089获取分享码 本书目录结构如 ...
- java闭合数据_java多线程中线程封闭详解
线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...
- Java线程池详解学习:ThreadPoolExecutor
Java线程池详解学习:ThreadPoolExecutor Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) - zhangpeterx的博客 在源码的目录java/util/ ...
- Java 线程池详解学习:FixedThreadPool,CachedThreadPool,ScheduledThreadPool...
Java常用的线程池有FixedThreadPool和CachedThreadPool,我们可以通过查看他们的源码来进行学习. Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) ...
- Java多线程之线程池详解
Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...
- Java 线程池详解及实例代码
转载自 Java 线程池详解及实例代码 这篇文章主要介绍了Java 线程池的相关资料,并符实例代码,帮助大家学习参考,需要的朋友可以参考下 线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时 ...
最新文章
- 超级 App 手机百度云端架构设计与个性化推荐
- Spring-----projects-----概述
- 快速理解Docker - 容器级虚拟化解决方案
- mysql 单表查询
- HTML中禁用表单控件的两种方法readonly与disabled
- Google Volley框架源码走读
- Flink SQL 实战:HBase 的结合应用
- Linux搭建SVN服务器
- 可以写在简历上的22个轻松上手的Java经典项目教程(含源码and笔记)
- Linux驱动开发: USB驱动开发
- 我的世界java材质包推荐下载_我的世界材质包排行-Minecraft材质包-我的世界高清材质包下载大全-Minecraft中文分享站...
- 关于JFreeChart中BarChart柱体宽度设置的问题纪要
- java高并发解决方案
- ode45的常用和扩展用法
- 纺织品GRSlogo使用标准 GRS认证的详情概括
- c语言文件尾没有newline字符,关于C++:”文件末尾无新行”编译器警告“No newline at end of file”...
- 等差数列java_java简单的编程(等差数列)
- Blood Type Diet
- amcharts动态生成数据
- 软件工程导论张海蕃书籍pdf_《软件工程导论》张海蕃课后习题答案
热门文章
- TensorFlow2 -官方教程 :保存和恢复模型
- windows7安装打印机提示“本地打印后台处理程序服务没有运行”
- 分析Android引起的“电视智能化”之TV用UI的现状与未来
- 不在同一局域网的两台电脑如何通过ssh连接
- android studio安装apk时,vivo 部分手机出现 解析软件包错误
- set -x 与 set +x
- 【CSS面试题】—CSS实现三角形
- python批量添加qq好友_python实现QQ批量登录功能
- JVM内存模型以及JVM内存模型图
- 什么是硬件加密与软件加密,有什么区别?