在 Python 中启动一个线程涉及到使用 threading
模块中 Thread
类提供的 start()
方法。此方法启动线程的活动,并在一个单独的执行线程中自动调用其 run()
方法。这意味着,当你对每个线程对象(例如,thread1, thread2, thread3)调用 start()
以启动它们的执行时,Python 将会启动独立的线程来并发执行在每个 Thread
实例中定义的 run()
方法。主线程在启动子线程之后将继续其自身的执行。
在本教程中,您将看到如何有效地在多线程编程中使用 start()
方法的一个详细解释和示例,以理解其在多线程应用程序中的行为。
在 Python 中启动线程
start()
方法对于开始线程的执行至关重要。它设置了线程的环境并调度它以运行。重要的是,它应该只对每个 Thread
对象调用一次。如果在同一 Thread
对象上调用了多次此方法,将会引发 RuntimeError
。
使用 Thread
对象上的 start()
方法的语法如下:
threading.thread.start()
示例
让我们看下面的示例,它演示了如何在 Python 中使用 start()
方法来启动一个新线程。
from threading import Thread
from time import sleep
def my_function(arg):
for i in range(arg):
print("child Thread running", i)
sleep(0.5)
thread = Thread(target = my_function, args = (10, ))
thread.start()
print("thread finished...exiting")
执行上述代码后,将会产生如下结果:
child Thread running 0
thread finished...exiting
child Thread running 1
child Thread running 2
child Thread running 3
child Thread running 4
child Thread running 5
child Thread running 6
child Thread running 7
child Thread running 8
child Thread running 9
示例
下面是一个另一个示例,展示了 start()
方法的工作情况。你可以观察到,如果不调用 start()
方法来启动 thread2
,那么它将保持非激活状态,并不会开始执行。
import threading
import time
class MyThread(threading.Thread):
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self):
print("Starting " + self.name)
print_time(self.name, self.counter)
print("Exiting " + self.name)
def print_time(threadName, counter):
while counter:
time.sleep(1)
print("%s: %s" % (threadName, time.ctime(time.time())))
counter -= 1
thread1 = MyThread(1, "Thread-1", 1)
thread2 = MyThread(2, "Thread-2", 2)
thread3 = MyThread(3, "Thread-3", 3)
thread1.start()
thread3.start()
print("Exiting Main Thread")
上述代码将会产生如下输出:
Starting Thread-1
Starting Thread-3
Exiting Main Thread
Thread-1: Mon Jun 24 18:24:59 2024
Exiting Thread-1
Thread-3: Mon Jun 24 18:24:59 2024
Thread-3: Mon Jun 24 18:25:00 2024
Thread-3: Mon Jun 24 18:25:01 2024
Exiting Thread-3