返回

多线程的run和start,究竟有什么区别?

后端

多线程是计算机科学中一个重要的概念,它允许应用程序同时执行多个任务。在Python中,可以使用threading模块创建和管理线程。threading模块提供了两个主要方法来运行线程:run()start()

run()方法

run()方法直接在当前线程中执行线程体(即线程要执行的任务)。当调用run()方法时,当前线程将暂停,直到线程体执行完毕。然后,当前线程将继续执行。

以下是一个使用run()方法创建和运行线程的示例:

import threading

def thread_function():
    print('Running thread function')

thread = threading.Thread(target=thread_function)
thread.run()

在这个示例中,thread_function()函数是线程体。当调用thread.run()时,thread_function()函数将在当前线程中执行。

start()方法

start()方法将创建一个新的线程来执行线程体。当调用start()方法时,Python解释器将创建一个新的线程,并将其添加到线程调度程序的队列中。然后,线程调度程序将根据需要调度新线程。

以下是一个使用start()方法创建和运行线程的示例:

import threading

def thread_function():
    print('Running thread function')

thread = threading.Thread(target=thread_function)
thread.start()

在这个示例中,thread_function()函数也是线程体。当调用thread.start()时,Python解释器将创建一个新的线程,并将thread_function()函数添加到线程调度程序的队列中。然后,线程调度程序将根据需要调度新线程。

run()start()的区别

run()start()方法之间的主要区别在于run()方法直接在当前线程中执行线程体,而start()方法将创建一个新的线程来执行线程体。

另一个区别是run()方法不会启动线程,而start()方法会启动线程。这意味着当调用run()方法时,线程体不会立即执行。而当调用start()方法时,线程体将立即执行。

最后,run()方法不能在已经启动的线程上调用,而start()方法可以在已经启动的线程上调用。

总结

run()start()都是threading模块中用于创建和运行线程的方法。run()方法直接在当前线程中执行线程体,而start()方法将创建一个新的线程来执行线程体。run()方法不会启动线程,而start()方法会启动线程。run()方法不能在已经启动的线程上调用,而start()方法可以在已经启动的线程上调用。