欢迎访问宙启技术站
智能推送

使用threading.Thread.join()实现线程同步的方法

发布时间:2023-12-18 07:36:22

线程同步是在多个线程中协调和控制它们的执行顺序和数据访问,以防止并发访问数据时出现问题。Python中的threading模块提供了join()方法,可以用来实现线程同步。

join()方法是一个阻塞方法,调用该方法会使当前线程等待被调用线程执行完毕。当一个线程执行到join()语句时,它会阻塞后面的代码,直到被调用线程执行完毕后才继续执行。

下面是一个使用join()方法实现线程同步的例子:

import threading

def thread_func(name):
    print("Thread %s starts" % name)
    for i in range(5):
        print("Thread %s: %d" % (name, i))
    
    print("Thread %s ends" % name)

if __name__ == "__main__":
    # 创建两个线程
    threads = []
    for i in range(2):
        t = threading.Thread(target=thread_func, args=(i,))
        threads.append(t)
    
    # 启动线程
    for t in threads:
        t.start()
    
    # 等待所有线程执行完毕
    for t in threads:
        t.join()

    print("All threads end")

在这个例子中,我们创建了两个线程,每个线程都执行一个简单的函数,在函数中打印线程的名称和一些数字。我们在每个线程结束之前调用了join()方法,确保两个线程都执行完毕后再执行后续的代码。

运行上述代码,输出结果如下:

Thread 0 starts
Thread 1 starts
Thread 0: 0
Thread 1: 0
Thread 0: 1
Thread 1: 1
Thread 0: 2
Thread 1: 2
Thread 0: 3
Thread 1: 3
Thread 0: 4
Thread 1: 4
Thread 0 ends
Thread 1 ends
All threads end

可以看到,线程0和线程1交替执行,每个线程都打印了一些数字。在所有线程执行完毕后,程序打印了"All threads end"。

通过join()方法的使用,我们实现了对多个线程的等待,并确保所有线程都执行完毕后再进行后续操作。这是一个简单但常用的线程同步方法。