Python中如何详细使用Thread.join()方法?
- 内容介绍
- 文章标签
- 相关推荐
本文共计868个文字,预计阅读时间需要4分钟。
在《前言》章节中,我们介绍了如何通过`threading`类创建并启动一个线程。以下是一个示例程序,演示了如何使用`threading`模块来创建一个线程:
pythonimport threading
def print_numbers(): for i in range(1, 11): print(i)
创建线程对象thread=threading.Thread(target=print_numbers)
启动线程thread.start()
等待线程完成thread.join()
前面章节中,我们讲解了如何通过 Thread 类创建并启动一个线程,当时给读者用如下的程序进行演示:import threading #定义线程要调用的方法,*add可接收多个以非关键字方式传入的参数 def action(*add): for arc in add: #调用 getName() 方法获取当前执行该程序的线程名 print(threading.current_thread().getName() +" "+ arc) #定义为线程方法传入的参数 my_tuple = ("c.biancheng.net/python/",\ "c.biancheng.net/shell/",\ "c.biancheng.net/java/") #创建线程 thread = threading.Thread(target = action,args =my_tuple) #启动线程 thread.start() #主线程执行如下语句 for i in range(5): print(threading.current_thread().getName()) 程序执行结果为(不唯一):
Thread-1 c.biancheng.net/python/MainThread
Thread-1 c.biancheng.net/shell/MainThread
Thread-1 c.biancheng.net/java/MainThread
MainThread
MainThread
但是,如果我们想让 Thread-1 子线程先执行,然后再让 MainThread 执行第 16、17 行代码,该如何实现呢?很简单,通过调用线程对象的 join() 方法即可。
join() 方法的功能是在程序指定位置,优先让该方法的调用者使用 CPU 资源。该方法的语法格式如下:
thread.join( [timeout] )
举个例子,修改上面的代码,如下所示:
import threading
#定义线程要调用的方法,*add可接收多个以非关键字方式传入的参数
def action(*add):
for arc in add:
#调用 getName() 方法获取当前执行该程序的线程名
print(threading.current_thread().getName() +" "+ arc)
#定义为线程方法传入的参数
my_tuple = ("c.biancheng.net/python/",\
"c.biancheng.net/shell/",\
"c.biancheng.net/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 c.biancheng.net/python/
Thread-1 c.biancheng.net/shell/
Thread-1 c.biancheng.net/java/
MainThread
MainThread
MainThread
MainThread
MainThread
本文共计868个文字,预计阅读时间需要4分钟。
在《前言》章节中,我们介绍了如何通过`threading`类创建并启动一个线程。以下是一个示例程序,演示了如何使用`threading`模块来创建一个线程:
pythonimport threading
def print_numbers(): for i in range(1, 11): print(i)
创建线程对象thread=threading.Thread(target=print_numbers)
启动线程thread.start()
等待线程完成thread.join()
前面章节中,我们讲解了如何通过 Thread 类创建并启动一个线程,当时给读者用如下的程序进行演示:import threading #定义线程要调用的方法,*add可接收多个以非关键字方式传入的参数 def action(*add): for arc in add: #调用 getName() 方法获取当前执行该程序的线程名 print(threading.current_thread().getName() +" "+ arc) #定义为线程方法传入的参数 my_tuple = ("c.biancheng.net/python/",\ "c.biancheng.net/shell/",\ "c.biancheng.net/java/") #创建线程 thread = threading.Thread(target = action,args =my_tuple) #启动线程 thread.start() #主线程执行如下语句 for i in range(5): print(threading.current_thread().getName()) 程序执行结果为(不唯一):
Thread-1 c.biancheng.net/python/MainThread
Thread-1 c.biancheng.net/shell/MainThread
Thread-1 c.biancheng.net/java/MainThread
MainThread
MainThread
但是,如果我们想让 Thread-1 子线程先执行,然后再让 MainThread 执行第 16、17 行代码,该如何实现呢?很简单,通过调用线程对象的 join() 方法即可。
join() 方法的功能是在程序指定位置,优先让该方法的调用者使用 CPU 资源。该方法的语法格式如下:
thread.join( [timeout] )
举个例子,修改上面的代码,如下所示:
import threading
#定义线程要调用的方法,*add可接收多个以非关键字方式传入的参数
def action(*add):
for arc in add:
#调用 getName() 方法获取当前执行该程序的线程名
print(threading.current_thread().getName() +" "+ arc)
#定义为线程方法传入的参数
my_tuple = ("c.biancheng.net/python/",\
"c.biancheng.net/shell/",\
"c.biancheng.net/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 c.biancheng.net/python/
Thread-1 c.biancheng.net/shell/
Thread-1 c.biancheng.net/java/
MainThread
MainThread
MainThread
MainThread
MainThread

