Python 简明教程

Python - Main Thread

在 Python 中, main thread 是 Python 解释器执行时启动的初始线程。它是 Python 进程中的默认线程,负责管理程序和创建其他线程。每个 Python 程序至少有一个称为主线程的执行线程。

默认情况下,主线程是非守护线程。在本教程中,你将看到有关 Python 编程中的主线程的详细解释及其相关示例。

Accessing the Main Thread

Python 中的 threading 模块提供用于访问线程的函数。以下是主要功能−

  1. threading.current_thread() :此函数返回表示当前线程的 threading.Thread 实例。

  2. threading.main_thread() :返回表示主线程的 threading.Thread 实例。

Example

threading.current_thread() 函数返回表示当前线程的 threading.Thread 实例。这是一个示例。

import threading

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

它将生成如下输出:

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

Example

此示例演示如何使用 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()

Main Thread Behavior in Python

无论何时完成执行脚本中未在单独线程中启动的所有代码,主线程都将退出。例如,当您使用 start() 方法调用 start a new thread 时,主线程将继续执行脚本中剩余的代码,直到到达末尾然后退出。

由于默认情况下其他线程以非守护程序模式启动,因此即使主线程已退出,它们也将继续运行,直到完成为止。

Example

以下示例显示了 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...

Main Thread Waiting for Other Threads

若要确保主线程等待所有其他线程完成,可以使用 join() 方法调用 join the threads 。通过使用 join() 方法,可以控制执行流并确保主线程在退出之前适当地等待所有其他线程完成其任务。这有助于有效管理多线程 Python 程序中线程的生命周期。

Example

此示例演示如何正确管理主线程并确保它在工作线程完成任务之前不会退出。

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