Python - 命名线程



在 Python 中,命名线程涉及将字符串作为标识符分配给线程对象。Python 中的线程名称主要用于识别目的,不会影响线程的行为或语义。多个线程可以共享相同的名称,并且可以在线程初始化期间指定名称或动态更改名称。

Python 中的线程命名提供了一种简单的方法来识别和管理并发程序中的线程。通过分配有意义的名称,用户可以提高代码的清晰度并轻松调试复杂的多线程应用程序。

在 Python 中命名线程

当您使用线程创建线程时。Thread() 类中,您可以使用 name 参数指定其名称。如果未提供,Python 会分配一个默认名称,如以下模式 “Thread-N”,其中 N 是一个小的十进制数。或者,如果指定目标函数,则默认名称格式为 “Thread-N (target_function_name)”。

下面是一个示例,演示如何为使用 threading 创建的线程分配自定义名称和默认名称。Thread() 类,并显示名称如何反映目标函数。


from threading import Thread
import threading
from time import sleep

def my_function_1(arg):
	 	print("This tread name is", threading.current_thread().name)

# Create thread objects
thread1 = Thread(target=my_function_1, name='My_thread', args=(2,))
thread2 = Thread(target=my_function_1, args=(3,))

print("This tread name is", threading.current_thread().name)

# Start the first thread and wait for 0.2 seconds
thread1.start()
thread1.join()

# Start the second thread and wait for it to complete
thread2.start()
thread2.join()

在执行上述操作时,它将产生以下结果 -

This tread name is MainThread
This tread name is My_thread
This tread name is Thread-1 (my_function_1)

为 Python 线程动态分配名称

您可以通过直接修改线程对象的 name 属性来动态分配或更改线程的名称。

此示例说明如何通过修改线程对象的 name 属性来动态更改线程名称。


from threading import Thread
import threading
from time import sleep

def my_function_1(arg):
	 	threading.current_thread().name = "custom_name"
	 	print("This tread name is", threading.current_thread().name)

# Create thread objects
thread1 = Thread(target=my_function_1, name='My_thread', args=(2,))
thread2 = Thread(target=my_function_1, args=(3,))

print("This tread name is", threading.current_thread().name)

# Start the first thread and wait for 0.2 seconds
thread1.start()
thread1.join()

# Start the second thread and wait for it to complete
thread2.start()
thread2.join()

当您执行上述代码时,它将产生以下结果——

This tread name is MainThread
This tread name is custom_name
This tread name is custom_name

线程可以使用自定义名称进行初始化,甚至可以在创建后重命名。此示例演示如何使用自定义名称创建线程,并在创建后修改线程的名称。


import threading

def addition_of_numbers(x, y):
	 	print("This Thread name is :", threading.current_thread().name)
	 	result = x + y

def cube_number(i):
	 	result = i ** 3
	 	print("This Thread name is :", threading.current_thread().name)

def basic_function():
	 	print("This Thread name is :", threading.current_thread().name)

# Create threads with custom names
t1 = threading.Thread(target=addition_of_numbers, name='My_thread', args=(2, 4))
t2 = threading.Thread(target=cube_number, args=(4,))
t3 = threading.Thread(target=basic_function)

# Start and join threads
t1.start()
t1.join()

t2.start()
t2.join()

t3.name = 'custom_name' 	# Assigning name after thread creation
t3.start()
t3.join()

print(threading.current_thread().name) 	# Print main thread's name

执行时,上述代码将产生以下结果 -

This Thread name is : My_thread
This Thread name is : Thread-1 (cube_number)
This Thread name is : custom_name
MainThread