Python - 主執行緒



在 Python 中,主執行緒是執行 Python 直譯器時啟動的初始執行緒。它是 Python 程序中的預設執行緒,負責管理程式並建立其他執行緒。每個 Python 程式至少有一個稱為主執行緒的執行執行緒。

預設情況下,主執行緒是非守護執行緒。在本教程中,您將看到關於 Python 程式設計中主執行緒的詳細解釋以及相關的示例。

訪問主執行緒

Python 中的 threading 模組提供訪問執行緒的函式。以下是關鍵函式:

  • threading.current_thread():此函式返回一個代表當前執行緒的 threading.Thread 例項。
  • threading.main_thread():返回一個代表主執行緒的 threading.Thread 例項。

示例

threading.current_thread() 函式返回一個代表當前執行緒的 threading.Thread 例項。這是一個例子。

import threading

name = 'Tutorialspoint'
print('Output:', name)
print(threading.current_thread())

它將產生以下輸出:

Output: Tutorialspoint
<_MainThread(MainThread, started 140260292161536)>    

示例

此示例演示如何使用 threading.main_thread() 函式獲取對主執行緒的引用。它還使用 threading.current_thread() 函式顯示主執行緒與其他執行緒之間的區別。

import threading
import time

def func(x):
   time.sleep(x)
   if not threading.current_thread() is threading.main_thread():
      print('threading.current_thread() not threading.main_thread()')

t = threading.Thread(target=func, args=(0.5,))
t.start()

print(threading.main_thread())
print("Main thread finished")

執行上述程式碼時,將產生以下結果:

<_MainThread(MainThread, started 140032182964224)>
Main thread finished
threading.current_thread() not threading.main_thread()

Python 中的主執行緒行為

只要指令碼中未在單獨執行緒中啟動的所有程式碼執行完畢,主執行緒就會退出。例如,當您使用 start() 方法啟動新執行緒時,主執行緒將繼續執行指令碼中剩餘的程式碼,直到到達末尾然後退出。

由於其他執行緒預設以非守護模式啟動,即使主執行緒已退出,它們也將繼續執行直到完成。

示例

以下示例顯示了 Python 多執行緒程式中的主執行緒行為。

import threading
import time

def func(x):
   print('Current Thread Details:',threading.current_thread())
   for n in range(x):
      print('Internal Thread Running', n)
   print('Internal Thread Finished...')

t = threading.Thread(target=func, args=(6,))
t.start()

for i in range(3):
   print('Main Thread Running',i)
print("Main Thread Finished...")

它將產生以下輸出:

Current Thread Details: Thread(Thread-1 (func), started 140562647860800)>
Main Thread Running 0
Internal Thread Running 0
Main Thread Running 1
Main Thread Running 2
Internal Thread Running 1
Main Thread Finished...
Internal Thread Running 2
Internal Thread Running 3
Internal Thread Running 4
Internal Thread Running 5
Internal Thread Finished...
上述程式碼在不同的執行和不同的編譯器上可能會產生不同的輸出。

主執行緒等待其他執行緒

為了確保主執行緒等待所有其他執行緒完成,您可以使用join()方法連線執行緒。透過使用join()方法,您可以控制執行流程,並確保主執行緒在退出之前正確等待所有其他執行緒完成其任務。這有助於有效地管理多執行緒Python程式中執行緒的生命週期。

示例

此示例演示如何正確管理主執行緒,並確保其在工作執行緒完成其任務之前不會退出。

from threading import Thread
from time import sleep

def my_function_1():
   print("Worker 1 started")
   sleep(1)
   print("Worker 1 done")

def my_function_2(main_thread):
   print("Worker 2 waiting for Worker 1 to finish")
   main_thread.join()
   print("Worker 2 started")
   sleep(1)
   print("Worker 2 done")

worker1 = Thread(target=my_function_1)
worker2 = Thread(target=my_function_2, args=(worker1,))

worker1.start()
worker2.start()

for num in range(6):
   print("Main thread is still working on task", num)
   sleep(0.60)

worker1.join()
print("Main thread Completed")

執行上述程式碼時,將產生以下結果:

Worker 1 started
Worker 2 waiting for Worker 1 to finish
Main thread is still working on task 0
Main thread is still working on task 1
Worker 1 done
Worker 2 started
Main thread is still working on task 2
Main thread is still working on task 3
Worker 2 done
Main thread is still working on task 4
Main thread is still working on task 5
Main thread Completed
廣告