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.
Dưới đây là các giai đoạn của vòng đời luồng Python −
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...
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...