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