Python - Naming the Threads

Trong Python, việc đặt tên cho một luồng liên quan đến việc gán một chuỗi làm định danh cho đối tượng luồng. Tên luồng trong Python chủ yếu được sử dụng cho mục đích nhận diện và không ảnh hưởng đến hành vi hoặc ý nghĩa của luồng. Nhiều luồng có thể chia sẻ cùng một tên, và tên có thể được chỉ định trong quá trình khởi tạo luồng hoặc thay đổi một cách động.

Đặt tên cho luồng trong Python cung cấp một cách đơn giản để xác định và quản lý các luồng trong một chương trình đồng thời. Bằng cách gán những tên có ý nghĩa, người dùng có thể nâng cao độ rõ ràng của mã và dễ dàng gỡ lỗi cho các ứng dụng đa luồng phức tạp.

Naming the Threads in Python

Khi bạn tạo một luồng bằng cách sử dụng lớp threading.Thread() , bạn có thể chỉ định tên của nó bằng cách sử dụng tham số name . Nếu không được cung cấp, Python sẽ gán một tên mặc định theo mẫu sau "Thread-N", trong đó N là một số thập phân nhỏ. Ngoài ra, nếu bạn chỉ định một hàm mục tiêu, định dạng tên mặc định sẽ trở thành "Thread-N (target_function_name)".

Example

Dưới đây là một ví dụ minh họa việc gán tên tùy chỉnh và tên mặc định cho các luồng được tạo ra bằng lớp threading.Thread() , và hiển thị cách tên có thể phản ánh các hàm mục tiêu.

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()

Khi thực hiện đoạn mã trên, nó sẽ tạo ra các kết quả sau:

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

Dynamically Assigning Names to the Python Threads

Bạn có thể gán hoặc thay đổi tên của một luồng một cách động bằng cách trực tiếp sửa đổi thuộc tính name của đối tượng luồng.

Example

Ví dụ này cho thấy cách thay đổi động tên luồng bằng cách sửa đổi thuộc tính name của đối tượng luồng.

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()

Khi bạn thực thi đoạn mã trên, nó sẽ tạo ra các kết quả sau:

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

Example

Các luồng có thể được khởi tạo với tên tùy chỉnh và thậm chí có thể được đổi tên sau khi tạo. Ví dụ này minh họa cách tạo các luồng với tên tùy chỉnh và thay đổi tên của một luồng sau khi đã tạo.

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

Khi thực thi, đoạn mã trên sẽ tạo ra các kết quả sau −

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