Python - 启动线程



在 Python 中,启动线程涉及使用 threading 模块中的 Thread 类提供的 start() 方法。此方法启动线程的活动,并在单独的执行线程中自动调用其 run() 方法。这意味着,当您在每个线程对象(例如 thread1、thread2、thread3)上调用 start() 以启动它们的执行时。

Python 启动单独的线程,这些线程并发执行每个 Thread 实例中定义的 run() 方法。主线程在启动子线程后继续执行。

在本教程中,您将看到有关如何在多线程编程中有效使用 start() 方法的详细说明和示例,以了解其在多线程应用程序中的行为。

在 Python 中启动线程

start() 方法是开始执行线程的基础。它设置线程的环境并安排它运行。重要的是,每个 Thread 对象只应调用一次。如果对同一个 Thread 对象多次调用此方法,它将引发 RuntimeError。

这是在 Thread 对象上使用 start() 方法的语法 -


 threading.thread.start()

让我们看看下面的示例,它演示了如何使用 start() 方法在 Python 中启动新线程。


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() 方法工作的例子。您可以观察到,如果不在 thread2 上调用 start() 方法,它将保持非活动状态并且不会开始执行。


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

# Create new threads
thread1 = MyThread(1, "Thread-1", 1)
thread2 = MyThread(2, "Thread-2", 2)
thread3 = MyThread(3, "Thread-3", 3)

# Start new Threads
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