Python 简明教程
Python - Starting a Thread
在 Python 中,启动线程涉及使用 threading 模块中的 Thread 类提供的 start() 方法。此方法启动线程的活动,并在单独的执行线程中自动调用其 run() 方法。这意味着,当您对每个线程对象(例如,thread1、thread2、thread3)调用 start() 以启动它们的执行时。
Python 以并发执行在每个 Thread 实例中定义的 run() 方法启动单独的线程。主线程在启动子线程后继续执行。
在本教程中,您将看到有关如何在多线程编程中有效使用 start() 方法的详细解释和示例,以了解其在多线程应用程序中的行为。
Starting a Thread in Python
start() 方法是开始执行线程的基础。它设置了线程的环境并调度它运行。重要的是,它只应在每个 Thread 对象上调用一次。如果对同一个 Thread 对象多次调用此方法,它将引发 RuntimeError。
以下是使用 start() 方法在 Thread 对象上的语法 −
threading.thread.start()
Example
让我们看下面的示例,展示如何在 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
Example
这里还有另一个演示 start() 方法工作原理的示例。您可以观察到,如果不针对线程 2 调用 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