【python】多线程编程中join函数的用法
2023-09-14 08:57:29 时间
在学习python 多线程编程的时候,一定会使用一个函数join,本章内容通过例子讲述join 在多线程编程中有哪些作用。
本文使用两段代码演示其功能
代码一
import threading, time
def now() :
return str( time.strftime( %Y-%m-%d %H:%M:%S , time.localtime() ) )
def func1():
print start func1: + now() + "\n"
time.sleep(3)
print stop func1: + now() + "\n"
def func2():
print start func2: + now() + "\n"
time.sleep(5)
print stop func2: , now() + "\n"
thtsk = []
thread1 = threading.Thread(target = func1)
thread1.start()
thtsk.append(thread1)
thread2 = threading.Thread(target = func2)
thread2.start()
thtsk.append(thread2)
print start join: + now() + "\n"
for thd in thtsk:
thd.join()
print end join: + now() + "\n"
该样例中使用了两个线程thread1,thread2,分别执行func1,func2,
其中
func1 的动作是打印开始时间,sleep 3s,打印结束时间
func2 的动作是打印开始时间,sleep 5s,打印结束时间。
后面使用start() 方法同步开始执行两个线程,然后开始循环调用两个线程的join()方法,join不加参数的时候结果如下:
解释:
func1 在3s 之后结束,fun2 在5s之后结束,并且最后输出 【end join】
代码二
import threading, time
def now() :
return str( time.strftime( %Y-%m-%d %H:%M:%S , time.localtime() ) )
def func1():
print start func1: + now() + "\n"
time.sleep(3)
print stop func1: + now() + "\n"
def func2():
print start func2: + now() + "\n"
time.sleep(8)
print stop func2: , now() + "\n"
thtsk = []
thread1 = threading.Thread(target = func1)
thread1.start()
thtsk.append(thread1)
thread2 = threading.Thread(target = func2)
thread2.start()
thtsk.append(thread2)
print start join: + now() + "\n"
for thd in thtsk:
thd.join(2)
print end join: + now() + "\n"
在join()函数添加参数 2 ,表示等待两秒,结果如下
解释:
两个线程开始并发执行,先执行func1的join(2),等func1执行2s后,执行func2的join(2),等线程2执行2s后,开始执行主进程,打印「end join」,1s之后fun2执行结束。
这里join(2)标示2s之后不管当前线程是否执行完成,都会处理下一个线程。
总结一下:
1 join方法的作用是阻塞主进程无法执行join以后的语句,专注执行多线程,必须等待多线程执行完毕之后才能执行主线程的语句。
2 多线程多join的情况下,依次执行各线程的join方法,前一个结束之后,才能执行后一个。
3 无参数,则等待到该线程结束,才开始执行下一个线程的join。
4 设置参数后,则等待该线程N秒之后不管该线程是否结束,就开始执行后面的主进程。
获取Python函数信息的方法 Python的反射机制可以动态获取对象信息以及动态调用对象,本文介绍如何获取对象中的函数注释信息以及参数信息。
【Python】15_初学函数 1、两种输出的小数位控制 # num = 10 # def anum(): # num = 20 # print(num) # anum() num = 3.14 print( %.3f % num) # f {变量:.nf} print(f {num:.3f} ) # 3.140 num1 = 1 # 00000001 print( %6d % num1) print( %06d % num1) # 000001 print(f {num1:06d} ) # 000001 (1)求和
Python中函数参数传递方法*args, **kwargs,还有其他 本文将讨论Python的函数参数。我们将了解*args和**kwargs,/和*的都是什么,虽然这个问题是一个基本的python问题,但是在我们写代码时会经常遇到,比如timm中就大量使用了这样的参数传递方式。
Python入门教程:什么闭包函数 闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用)。闭包指的是:函数内部函数对外部作用域而非全局作用域的引用。 提示:之前我们都是通过参数将外部的值传给函数,闭包提供了另外一种思路,包起来喽,包起呦,包起来哇。
本文使用两段代码演示其功能
代码一
import threading, time
def now() :
return str( time.strftime( %Y-%m-%d %H:%M:%S , time.localtime() ) )
def func1():
print start func1: + now() + "\n"
time.sleep(3)
print stop func1: + now() + "\n"
def func2():
print start func2: + now() + "\n"
time.sleep(5)
print stop func2: , now() + "\n"
thtsk = []
thread1 = threading.Thread(target = func1)
thread1.start()
thtsk.append(thread1)
thread2 = threading.Thread(target = func2)
thread2.start()
thtsk.append(thread2)
print start join: + now() + "\n"
for thd in thtsk:
thd.join()
print end join: + now() + "\n"
该样例中使用了两个线程thread1,thread2,分别执行func1,func2,
其中
func1 的动作是打印开始时间,sleep 3s,打印结束时间
func2 的动作是打印开始时间,sleep 5s,打印结束时间。
后面使用start() 方法同步开始执行两个线程,然后开始循环调用两个线程的join()方法,join不加参数的时候结果如下:
解释:
func1 在3s 之后结束,fun2 在5s之后结束,并且最后输出 【end join】
代码二
import threading, time
def now() :
return str( time.strftime( %Y-%m-%d %H:%M:%S , time.localtime() ) )
def func1():
print start func1: + now() + "\n"
time.sleep(3)
print stop func1: + now() + "\n"
def func2():
print start func2: + now() + "\n"
time.sleep(8)
print stop func2: , now() + "\n"
thtsk = []
thread1 = threading.Thread(target = func1)
thread1.start()
thtsk.append(thread1)
thread2 = threading.Thread(target = func2)
thread2.start()
thtsk.append(thread2)
print start join: + now() + "\n"
for thd in thtsk:
thd.join(2)
print end join: + now() + "\n"
在join()函数添加参数 2 ,表示等待两秒,结果如下
解释:
两个线程开始并发执行,先执行func1的join(2),等func1执行2s后,执行func2的join(2),等线程2执行2s后,开始执行主进程,打印「end join」,1s之后fun2执行结束。
这里join(2)标示2s之后不管当前线程是否执行完成,都会处理下一个线程。
总结一下:
1 join方法的作用是阻塞主进程无法执行join以后的语句,专注执行多线程,必须等待多线程执行完毕之后才能执行主线程的语句。
2 多线程多join的情况下,依次执行各线程的join方法,前一个结束之后,才能执行后一个。
3 无参数,则等待到该线程结束,才开始执行下一个线程的join。
4 设置参数后,则等待该线程N秒之后不管该线程是否结束,就开始执行后面的主进程。
获取Python函数信息的方法 Python的反射机制可以动态获取对象信息以及动态调用对象,本文介绍如何获取对象中的函数注释信息以及参数信息。
【Python】15_初学函数 1、两种输出的小数位控制 # num = 10 # def anum(): # num = 20 # print(num) # anum() num = 3.14 print( %.3f % num) # f {变量:.nf} print(f {num:.3f} ) # 3.140 num1 = 1 # 00000001 print( %6d % num1) print( %06d % num1) # 000001 print(f {num1:06d} ) # 000001 (1)求和
Python中函数参数传递方法*args, **kwargs,还有其他 本文将讨论Python的函数参数。我们将了解*args和**kwargs,/和*的都是什么,虽然这个问题是一个基本的python问题,但是在我们写代码时会经常遇到,比如timm中就大量使用了这样的参数传递方式。
Python入门教程:什么闭包函数 闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用)。闭包指的是:函数内部函数对外部作用域而非全局作用域的引用。 提示:之前我们都是通过参数将外部的值传给函数,闭包提供了另外一种思路,包起来喽,包起呦,包起来哇。
相关文章
- 【Python】多线程-线程池使用_url判断存活
- Python多线程采集百度相关搜索关键词
- python进阶学习笔记(四)--多线程thread
- Python程序 #!/usr/bin/python 的解释
- PYTHON文件多线程下载
- 【Python实战】python中含有中文字符无法运行
- 对比python的进程和线程:多线程是假的
- Python的IDE:基于Eclipse/MyEclipse软件的PyDev插件配置python的开发环境(不同python项目加载不同版本的python)—从而实现Python编程图文教程之详细攻略
- Python编程语言学习:包导入和模块搜索路径(包路径)简介、使用方法(python系统环境路径的查询与添加)之详细攻略
- Python语言学习之打印输出那些事:python输出图表和各种吊炸天的字符串或图画、版权声明(如README.md)等之详细攻略
- Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件
- Python:更改默认启动的python程序及其对应的安装包路径(更改pip的默认安装包的路径)图文教程之详细攻略
- Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法、如何查询某个函数&关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(计算器简单功能)
- Python语言学习之文件格式后缀那些事:python和常见各种文件格式后缀介绍、使用方法之详细攻略
- Python中的多线程是什么?如何实现?(附零基础学习资料)
- 〖Python语法进阶篇②〗- 线程与多线程概述
- Python编程:shelve模块-持久化python数据
- Python编程:查看python环境支持的whl
- Python编程:查看python语法中的关键字keyword
- python并发编程&多线程(二)
- python并发编程&多线程(一)
- python 多线程编程
- Python 高级编程之并发与多线程(三)
- python零基础学编程:Python是什么?为什么Python这么火,学Python能干什么?