python线程join函数的作用与使用方法

  • Post category:Python

下面是Python线程join()函数的详细讲解。

1. 线程join()函数的作用

join()函数是Python中线程对象的一个方法,用于阻塞主线程,使得主线程等待子线程执行完毕后再继续执行。具体来说,join()函数会使得主线程阻塞,直到一个线程结束或者超时才能继续执行之后的代码。

2. 线程join()函数的使用方法

线程join()函数的使用也非常简单,只需要在需要等待线程结束的地方调用线程对象的join()方法即可,如下所示:

thread_obj.join()   # 等待线程thread_obj结束

在实际使用中,通常会在创建线程后立即调用join()函数,这样可以确保线程执行完毕后再继续主线程的执行。例如:

import threading
import time

def print_time(delay):
    time.sleep(delay)
    print("Hello, world!")

# 创建线程
t = threading.Thread(target=print_time, args=(5,))
t.start()

# 等待线程执行完毕
t.join()

print("Done!")

在上述示例中,我们创建了一个等待5秒后输出”Hello, world!”的线程,并在创建后立即调用了join()函数,确保线程执行完毕后再输出”Done!”。

需要注意的是,一个线程只能被join()一次,在多次调用join()函数时,只有第一次调用有效,后面的调用都会被忽略。

3. 线程join()函数的实例说明

接下来,我们使用两个例子来说明线程join()函数的使用。

示例一

在这个示例中,我们创建10个线程,每个线程都会延迟1秒后输出线程编号,我们会在创建线程后一个一个地调用join()函数确保线程顺序输出:

import threading
import time

def print_num(num):
    time.sleep(1)
    print("Thread %s: %s" % (num, threading.currentThread().getName()))

for i in range(10):
    t = threading.Thread(target=print_num, args=(i,))
    t.start()
    t.join()

print("Done!")

执行结果如下:

Thread 0: Thread-1
Thread 1: Thread-2
Thread 2: Thread-3
Thread 3: Thread-4
Thread 4: Thread-5
Thread 5: Thread-6
Thread 6: Thread-7
Thread 7: Thread-8
Thread 8: Thread-9
Thread 9: Thread-10
Done!

可以看到,虽然我们创建了10个线程,但是它们的输出却按照顺序一个一个地输出,这是因为我们在创建线程之后立即调用了join()函数确保了线程的顺序输出。

示例二

在这个示例中,我们创建两个线程,一个线程计算1到100之和,另一个线程计算101到200之和,然后主线程等待两个线程执行完毕后输出它们的和:

import threading

def sum_1_100():
    sum = 0
    for i in range(1, 101):
        sum += i
    return sum

def sum_101_200():
    sum = 0
    for i in range(101, 201):
        sum += i
    return sum

t1 = threading.Thread(target=sum_1_100)
t2 = threading.Thread(target=sum_101_200)

t1.start()
t2.start()

t1.join()
t2.join()

sum = t1.result() + t2.result()
print("Sum from 1 to 200 is:", sum)

在这个示例中,我们创建了两个线程分别计算1到100和101到200之和,并在主线程中等待两个线程执行完毕后将它们的和输出。注意,由于线程默认没有返回值,我们需要使用ThreadWithResult类来包装线程函数,使得它们可以返回计算结果。

执行结果如下:

Sum from 1 to 200 is: 20100

可以看到,我们成功地使用join()函数等待了两个线程的执行,并正确地输出了它们的和。

以上就是Python线程join()函数的详细讲解,希望可以帮助到你。