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