Python - Thread Life cycle

Một đối tượng luồng (thread) trải qua các giai đoạn khác nhau trong vòng đời của nó. Khi một đối tượng luồng mới được tạo ra, nó phải được khởi động, điều này sẽ gọi phương thức run() của lớp luồng. Phương thức này chứa logic của quá trình sẽ được thực hiện bởi luồng mới. Luồng hoàn thành nhiệm vụ của nó khi phương thức run() kết thúc, và luồng mới tạo ra sẽ hợp nhất với luồng chính.

Trong khi một luồng đang chạy, nó có thể bị tạm dừng trong một khoảng thời gian đã định sẵn hoặc có thể được yêu cầu tạm dừng cho đến khi một sự kiện nhất định xảy ra. Luồng sẽ tiếp tục sau khoảng thời gian đã chỉ định hoặc sau khi quá trình kết thúc.

thread_life_cycle

States of a Thread Life Cycle in Python

Dưới đây là các giai đoạn của vòng đời luồng Python −

  • Creating a Thread − To create a new thread in Python, you typically use the Thread class from the threading module.
  • Starting a Thread − Once a thread object is created, it must be started by calling its start() method. This initiates the thread's activity and invokes its run() method in a separate thread.
  • Paused/Blocked State − Threads can be paused or blocked for various reasons, such as waiting for I/O operations to complete or another thread to perform a task. This is typically managed by calling its join() method. This blocks the calling thread until the thread being joined terminates.
  • Synchronizing Threads − Synchronization ensures orderly execution and shared resource management among threads. This can be done by using synchronization primitives like locks, semaphores, or condition variables.
  • Termination − A thread terminates when its run() method completes execution, either by finishing its task or encountering an exception.

Example: Python Thread Life Cycle Demonstration

Ví dụ này minh họa vòng đời của luồng trong Python bằng cách cho thấy việc tạo luồng, khởi động, thực thi và đồng bộ hóa với luồng chính.

import threading

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

# Create thread objects
t1 = threading.Thread(target=func, args=(2,))
t2 = threading.Thread(target=func, args=(3,))

# Start the threads
print('Thread State: CREATED')
t1.start()
t2.start()

# Wait for threads to complete
t1.join()
t2.join()
print('Threads State: FINISHED')

# Simulate main thread work
for i in range(3):
   print('Main Thread Running', i)

print("Main Thread Finished...")

Output

Khi đoạn mã trên được thực thi, nó sẽ tạo ra đầu ra sau:

Thread State: CREATED
Current Thread Details: <Thread(Thread-1 (func), started 140051032258112)>
Thread-1 (func) Running 0
Thread-1 (func) Running 1
Internal Thread Finished...
Current Thread Details: <Thread(Thread-2 (func), started 140051023865408)>
Thread-2 (func) Running 0
Thread-2 (func) Running 1
Thread-2 (func) Running 2
Internal Thread Finished...
Threads State: FINISHED
Main Thread Running 0
Main Thread Running 1
Main Thread Running 2
Main Thread Finished...

Example: Using a Synchronization Primitive

Dưới đây là một ví dụ khác minh họa vòng đời của luồng trong Python, bao gồm các trạng thái tạo, khởi động, chạy và kết thúc, cùng với việc đồng bộ hóa sử dụng semaphore.

import threading
import time

# Create a semaphore 
semaphore = threading.Semaphore(2)

def worker():
   with semaphore:
      print('{} has started working'.format(threading.current_thread().name))
      time.sleep(2)
      print('{} has finished working'.format(threading.current_thread().name))

# Create a list to keep track of thread objects
threads = []

# Create and start 5 threads
for i in range(5):
   t = threading.Thread(target=worker, name='Thread-{}'.format(i+1))
   threads.append(t)
   print('{} has been created'.format(t.name))
   t.start()

# Wait for all threads to complete
for t in threads:
   t.join()
   print('{} has terminated'.format(t.name))

print('Threads State: All are FINISHED')
print("Main Thread Finished...")

Output

Khi đoạn mã trên được thực thi, nó sẽ tạo ra đầu ra sau:

Thread-1 has been created
Thread-1 has started working
Thread-2 has been created
Thread-2 has started working
Thread-3 has been created
Thread-4 has been created
Thread-5 has been created
Thread-1 has finished working
Thread-2 has finished working
Thread-3 has started working
Thread-1 has terminated
Thread-2 has terminated
Thread-4 has started working
Thread-3 has finished working
Thread-5 has started working
Thread-3 has terminated
Thread-4 has finished working
Thread-4 has terminated
Thread-5 has finished working
Thread-5 has terminated
Threads State: All are FINISHED
Main Thread Finished...