Python 多线程等待所有线程完成

Python 多线程等待所有线程完成

在本文中,我们将介绍如何使用Python中的多线程,并等待所有线程完成后再继续执行。

阅读更多:Python 教程

多线程介绍

多线程是一种广泛使用的并发编程技术,可以实现在一个程序中同时执行多个任务。使用多线程可以提高程序的执行效率,特别是对于一些IO密集型的任务。在Python中,我们可以使用threading模块来实现多线程。

创建和启动线程

首先,让我们通过一个简单的示例来了解如何创建和启动线程。在下面的示例中,我们创建了2个线程,分别用于输出数字和字母。

import threading
import time

def print_numbers():
    for i in range(1, 6):
        print(i)
        time.sleep(1)

def print_letters():
    for char in 'ABCDE':
        print(char)
        time.sleep(1)

# 创建线程
t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_letters)

# 启动线程
t1.start()
t2.start()

在上面的代码中,我们使用threading.Thread类创建了两个线程t1t2,分别指定了线程的目标函数print_numbersprint_letters。然后通过start()方法启动线程,线程会自动执行目标函数。

等待线程完成

如果我们希望在主线程中等待所有子线程完成后再继续执行其他操作,可以使用join()方法。在下面的示例中,我们修改了之前的代码,在主线程中等待两个子线程完成后再输出”Done”。

import threading
import time

def print_numbers():
    for i in range(1, 6):
        print(i)
        time.sleep(1)

def print_letters():
    for char in 'ABCDE':
        print(char)
        time.sleep(1)

# 创建线程
t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_letters)

# 启动线程
t1.start()
t2.start()

# 等待线程完成
t1.join()
t2.join()

print("Done")

在上面的代码中,我们在t1.join()t2.join()处调用了join()方法,这将导致主线程等待t1t2线程完成后再继续执行。

多线程等待所有线程完成

如果我们不确定有多少个子线程需要等待,可以使用threading.active_count()方法获取活跃的线程数量,并循环调用join()方法等待所有线程完成。下面的示例中,我们创建了5个线程,并使用active_count()方法获取活跃的线程数,并通过循环等待所有线程完成。

import threading
import time

def print_numbers():
    for i in range(1, 6):
        print(i)
        time.sleep(1)

def print_letters():
    for char in 'ABCDE':
        print(char)
        time.sleep(1)

# 创建线程
threads = []
for _ in range(5):
    threads.append(threading.Thread(target=print_numbers if len(threads) % 2 == 0 else print_letters))

# 启动线程
for t in threads:
    t.start()

# 等待所有线程完成
while threading.active_count() > 1:
    time.sleep(0.1)

print("Done")

在上面的代码中,我们创建了5个线程,并使用列表threads保存了所有线程。然后依次启动所有线程,并通过循环等待所有线程完成,直到只剩下主线程一个活跃线程。

总结

通过threading模块,我们可以方便地在Python中实现多线程。使用join()方法可以等待指定的线程完成,使用active_count()方法可以获取活跃的线程数。这样可以实现等待所有线程完成后再继续执行其他操作。

在本文中,我们介绍了如何使用多线程,并等待所有线程完成。希望这对你有所帮助!

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程