Python中的start()方法与join()方法的配合使用
发布时间:2023-12-29 05:38:13
在Python中,start()方法用于启动一个新的线程,而join()方法用于等待该线程运行结束。
start()方法的作用是开启一个线程,并执行线程的run()方法。通过调用start()方法,可以让线程在后台运行,不会阻塞主线程的执行。
join()方法的作用是等待线程执行完毕。当调用join()方法时,主线程会暂停执行,直到被调用的线程运行结束后才会继续执行。
下面是一个使用start()方法和join()方法的示例:
import threading
import time
def my_func():
print("Thread started")
time.sleep(3) # 模拟耗时操作
print("Thread finished")
# 创建线程
thread = threading.Thread(target=my_func)
# 启动线程
thread.start()
# 主线程等待子线程执行完毕
thread.join()
print("Main thread finished")
在上面的示例中,我们定义了一个函数my_func(),用于打印一条消息并模拟一个耗时操作。然后,我们创建了一个线程thread,并将my_func()函数指定为线程的目标函数。接着,我们调用thread.start()方法启动线程。
在主线程中,我们调用thread.join()方法,这会导致主线程暂停执行,直到thread线程执行结束。最后,我们打印一条消息,表示主线程执行完毕。
运行以上代码,输出如下:
Thread started Thread finished Main thread finished
从输出结果可以看出,线程的start()方法启动后,可以在后台运行,而不需要等待该线程执行完毕。主线程在调用join()方法后,会暂停执行,直到被调用的线程执行完毕。
需要注意的是,join()方法必须在start()方法之后调用。如果在调用join()方法之前调用start()方法,会抛出RuntimeError异常。
另外,join()方法还可以传入一个可选的超时参数,用于指定等待线程执行的最长时间。如果超过指定的时间,join()方法会返回,主线程会继续执行。例如,可以将thread.join(2)改为thread.join(1),这会导致主线程等待1秒后继续执行。
