首页 > Python并发编程
Python Thread join()用法详解
前面章节中,我们讲解了如何通过 Thread 类创建并启动一个线程,当时给读者用如下的程序进行演示:
但是,如果我们想让 Thread-1 子线程先执行,然后再让 MainThread 执行第 16、17 行代码,该如何实现呢?很简单,通过调用线程对象的 join() 方法即可。
join() 方法的功能是在程序指定位置,优先让该方法的调用者使用 CPU 资源。该方法的语法格式如下:
举个例子,修改上面的代码,如下所示:
import threading #定义线程要调用的方法,*add可接收多个以非关键字方式传入的参数 def action(*add): for arc in add: #调用 getName() 方法获取当前执行该程序的线程名 print(threading.current_thread().getName() +" "+ arc) #定义为线程方法传入的参数 my_tuple = ("https://www.xinbaoku.com/python/",\ "https://www.xinbaoku.com/shell/",\ "https://www.xinbaoku.com/java/") #创建线程 thread = threading.Thread(target = action,args =my_tuple) #启动线程 thread.start() #主线程执行如下语句 for i in range(5): print(threading.current_thread().getName())程序执行结果为(不唯一):
Thread-1 https://www.xinbaoku.com/python/MainThread
Thread-1 https://www.xinbaoku.com/shell/MainThread
Thread-1 https://www.xinbaoku.com/java/MainThread
MainThread
MainThread
但是,如果我们想让 Thread-1 子线程先执行,然后再让 MainThread 执行第 16、17 行代码,该如何实现呢?很简单,通过调用线程对象的 join() 方法即可。
join() 方法的功能是在程序指定位置,优先让该方法的调用者使用 CPU 资源。该方法的语法格式如下:
thread.join( [timeout] )
其中,thread 为 Thread 类或其子类的实例化对象;timeout 参数作为可选参数,其功能是指定 thread 线程最多可以霸占 CPU 资源的时间(以秒为单位),如果省略,则默认直到 thread 执行结束(进入死亡状态)才释放 CPU 资源。举个例子,修改上面的代码,如下所示:
import threading #定义线程要调用的方法,*add可接收多个以非关键字方式传入的参数 def action(*add): for arc in add: #调用 getName() 方法获取当前执行该程序的线程名 print(threading.current_thread().getName() +" "+ arc) #定义为线程方法传入的参数 my_tuple = ("https://www.xinbaoku.com/python/",\ "https://www.xinbaoku.com/shell/",\ "https://www.xinbaoku.com/java/") #创建线程 thread = threading.Thread(target = action,args =my_tuple) #启动线程 thread.start() #指定 thread 线程优先执行完毕 thread.join() #主线程执行如下语句 for i in range(5): print(threading.current_thread().getName())程序执行结果为:
Thread-1 https://www.xinbaoku.com/python/
Thread-1 https://www.xinbaoku.com/shell/
Thread-1 https://www.xinbaoku.com/java/
MainThread
MainThread
MainThread
MainThread
MainThread
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算