【python教程】对多线程中join()的详细教程
在 Python 的多线程编程中,经常碰到 thread.join()这样的代码。那么今天咱们用实际代码来解释一下 join 函数的作用。
一、
当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时,主线程会创建多个子线程,在python中,默认情况下(其实就是setDaemon(False)),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束,例子见下面。
# 测试多线程中join的功能
import threading, time
def doWaiting():print 'start waiting1: ' + time.strftime('%H:%M:%S') + "\n"time.sleep(3)print 'stop waiting1: ' + time.strftime('%H:%M:%S') + "\n"
def doWaiting1():print 'start waiting2: ' + time.strftime('%H:%M:%S') + "\n"time.sleep(8)print 'stop waiting2: ', time.strftime('%H:%M:%S') + "\n"
tsk = []
thread1 = threading.Thread(target = doWaiting)
thread1.start()
tsk.append(thread1)
thread2 = threading.Thread(target = doWaiting1)
thread2.start()
tsk.append(thread2)
print 'start join: ' + time.strftime('%H:%M:%S') + "\n"print 'end join: ' + time.strftime('%H:%M:%S') + "\n"
代码执行结果如下:
start waiting1: 22:24:20start join: 22:24:20
start waiting2: 22:24:20end join: 22:24:20stop waiting1: 22:24:23stop waiting2: 22:24:28
二、
当我们使用setDaemon(True)方法,设置子线程为守护线程时,主线程一旦执行结束,则全部线程全部被终止执行,可能出现的情况就是,子线程的任务还没有完全执行结束,就被迫停止,例子见下面。
# 测试多线程中join的功能
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import threading, time
def doWaiting():print 'start waiting1: ' + time.strftime('%H:%M:%S') + "\n"time.sleep(3)print 'stop waiting1: ' + time.strftime('%H:%M:%S') + "\n"
def doWaiting1():print 'start waiting2: ' + time.strftime('%H:%M:%S') + "\n"time.sleep(8)print 'stop waiting2: ', time.strftime('%H:%M:%S') + "\n"
tsk = []
thread1 = threading.Thread(target = doWaiting)
thread1.setDaemon(True)
thread1.start()
tsk.append(thread1)
thread2 = threading.Thread(target = doWaiting1)
thread2.setDaemon(True)
thread2.start()
tsk.append(thread2)
print 'start join: ' + time.strftime('%H:%M:%S') + "\n"print 'end join: ' + time.strftime('%H:%M:%S') + "\n"
代码执行结果如下:
start waiting1: 22:34:46start waiting2: 22:34:46
start join: 22:34:46end join: 22:34:46
三、
没有设置守护线程且没有设置join函数的timeout参数时,主线程将会一直等待,直到子线程全部结束,主线程才结束,程序退出。
代码如下:
# 测试多线程中join的功能
import threading, time
def doWaiting():print 'start waiting1: ' + time.strftime('%H:%M:%S') + "\n"time.sleep(3)print 'stop waiting1: ' + time.strftime('%H:%M:%S') + "\n"
def doWaiting1():print 'start waiting2: ' + time.strftime('%H:%M:%S') + "\n"time.sleep(8)print 'stop waiting2: ', time.strftime('%H:%M:%S') + "\n"
tsk = []
thread1 = threading.Thread(target = doWaiting)
thread1.start()
tsk.append(thread1)
thread2 = threading.Thread(target = doWaiting1)
thread2.start()
tsk.append(thread2)
print 'start join: ' + time.strftime('%H:%M:%S') + "\n"
for tt in tsk:tt.join()
print 'end join: ' + time.strftime('%H:%M:%S') + "\n"
代码执行结果如下:
start waiting1: 22:41:50start join: 22:41:50
start waiting2: 22:41:50stop waiting1: 22:41:53stop waiting2: 22:41:58end join: 22:41:58
四、
当没有设置守护线程且join函数的参数timeout=2时,主线程将会等待多个子线程timeout的累加和这样的一段时间,时间一到,主线程结束,但是并没有杀死子线程,子线程依然可以继续执行,直到子线程全部结束,程序退出。
代码如下:
# 测试多线程中join的功能
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import threading, time
def doWaiting():print 'start waiting1: ' + time.strftime('%H:%M:%S') + "\n"time.sleep(3)print 'stop waiting1: ' + time.strftime('%H:%M:%S') + "\n"
def doWaiting1():print 'start waiting2: ' + time.strftime('%H:%M:%S') + "\n"time.sleep(8)print 'stop waiting2: ', time.strftime('%H:%M:%S') + "\n"
tsk = []
thread1 = threading.Thread(target = doWaiting)
thread1.start()
tsk.append(thread1)
thread2 = threading.Thread(target = doWaiting1)
thread2.start()
tsk.append(thread2)
print 'start join: ' + time.strftime('%H:%M:%S') + "\n"
for tt in tsk:tt.join(2)
print 'end join: ' + time.strftime('%H:%M:%S') + "\n"
代码执行结果如下:
start waiting1: 23:02:34start waiting2: 23:02:34
start join: 23:02:34stop waiting1: 23:02:37end join: 23:02:38stop waiting2: 23:02:42
五、
当设置守护线程join函数的参数timeout=2时,主线程将会等待多个子线程timeout的累加和这样的一段时间,时间一到,主线程结束,杀死未执行完的子线程,程序退出。
代码如下:
# 测试多线程中join的功能
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import threading, time
def doWaiting():print 'start waiting1: ' + time.strftime('%H:%M:%S') + "\n"time.sleep(3)print 'stop waiting1: ' + time.strftime('%H:%M:%S') + "\n"
def doWaiting1():print 'start waiting2: ' + time.strftime('%H:%M:%S') + "\n"time.sleep(8)print 'stop waiting2: ', time.strftime('%H:%M:%S') + "\n"
tsk = []
thread1 = threading.Thread(target = doWaiting)
thread1.setDaemon(True)
thread1.start()
tsk.append(thread1)
thread2 = threading.Thread(target = doWaiting1)
thread2.setDaemon(True)
thread2.start()
tsk.append(thread2)
print 'start join: ' + time.strftime('%H:%M:%S') + "\n"
for tt in tsk:tt.join(2)
print 'end join: ' + time.strftime('%H:%M:%S') + "\n"
代码执行结果如下:
start waiting1: 23:23:57start waiting2: 23:23:57
start join: 23:23:57stop waiting1: 23:24:00end join: 23:24:01
【python教程】对多线程中join()的详细教程相关推荐
- python多线程中join()的理解
在 Python 的多线程编程中,经常碰到 thread.join()这样的代码.那么今天咱们用实际代码来解释一下 join 函数的作用. 第一,当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...
- python数据科学系列:pandas入门详细教程
导读 前2篇分别系统性介绍了numpy和matplotlib的入门基本知识,今天本文自然是要对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀&q ...
- Python数据可视化之Plotnine库超详细教程系列
Python数据可视化之Plotnine库超详细教程系列(一):概述 一.Plotnine库简介 ggplot2包奠定了R语言数据可视化在数据科学中的地位,数据可视化一直是Python的短板,即使有M ...
- VMware15中安装Linux详细教程
VMware15中安装Linux详细教程 ======================== 一. 搭建VMware环境 1. 打开链接(https://www.vmware.com/cn.html), ...
- Adobe Photoshop修改中英文语言教程?ps中文版变为英文版详细教程
Adobe Photoshop修改中英文语言教程?ps中文版变为英文版详细教程 有用户在使用Photoshop都会遇到需要更改软件语言的问题,例如动作插件,就要求在英文版本下的PS中使用,今天小编为大 ...
- JAVA多线程中join()方法的详细分析
虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像 ...
- python如何使用多线程_Python多线程与多线程中join()的用法
Python多线程与多进程中join()方法的效果是相同的. 下面仅以多线程为例: 首先需要明确几个概念: 知识点一: 当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置 ...
- python头像教程_微信好友头像全家福详细教程python版
昨天按照大佬的代码,做了一个微信全家福的图片,后面好多人问我是怎么做的,索性我就出个详细的教程吧,我python也是三脚猫功夫,有不对的地方,还请各位大佬手下留情. 先看看成果吧 微信好友头像全家福详 ...
- 最详细的python案例学习与实践(含详细教程)
为了学习Python,使用Python开发应用程序,手头必须有得力的工具.在笔者看来,Python和PyCharm是最基本的学习和开发工具.如果要成为教育家或作家型的Python程序员,那么还必须准备 ...
最新文章
- Java 程序员必备的 15 个框架,前 3 个地位无可动摇!
- 【BZOJ】1572: [Usaco2009 Open]工作安排Job
- JDK安装以及开发环境搭建
- 数据库开发基本操作-数据库基础知识
- bind9 安装:部署自建dns系统
- java http请求原理_浅谈Spring Cloud zuul http请求转发原理
- 《实现模式(修订版)》—第2章模式
- 华为机试HJ30:字符串合并处理
- 分享过滤条件中增加一个自定义过滤变量插件代码
- php 实用 函数,PHP实用函数9
- VMware Vsphere 虚拟化
- phonegap plugin.xml 示例
- 【Python】python帮助文档
- 最全常见算法工程师面试题目整理
- Outlook的服务器设置中POP3协议,在outlook的服务器设置中pop3协议是指什么
- 可能有用的篡改检测常识
- maxwell采集mysql binlog 日志数据到kafka topic
- 网易前端JavaScript编码规范
- excel表格多列数据中查找重复行数据
- xmind 文件 打开后会在当前目录生成 configuration,p2和workspace目录,artifacts.xml文件 解决