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
广告