Luồng trong khoa học máy tính là một tập hợp các hướng dẫn có thể được quản lý độc lập bởi bộ lập lịch, là một phần của hệ điều hành.
Chức năng chính của Threading là chạy nhiều luồng cùng một lúc. Luồng có nghĩa là các tác vụ khác nhau, các lệnh gọi hàm trong chương trình và nhiều luồng chạy cùng lúc không có nghĩa là chúng được thực thi trên các máy khác nhau.
Đa luồng được sử dụng trong hai trường hợp.
-
Khi đầu ra của chương trình con cần kết hợp với chương trình chính.
-
Khi chương trình chính chứa các đoạn mã tương đối độc lập với nhau.
Mô-đun phân luồng
Python cung cấp mô-đun Phân luồng rất mạnh mẽ và cũng cung cấp hỗ trợ cấp cao cho các luồng.
Mô-đun phân luồng xác định rất nhiều chức năng được sử dụng để lấy dữ liệu liên quan đến luồng và các chức năng này được thực thi tự động.
threading.active_count ()
Hàm này trả về số lượng đối tượng Thread hiện đang tồn tại. Ở đây, tổng số được trả về bằng với độ dài của danh sách được trả về bởi enumerate ().
threading.current_thread ()
Hàm này trả về đối tượng Luồng hiện tại và nó tương ứng với luồng điều khiển của người gọi.
threading.get_ident ()
Hàm này trả về ‘mã định danh luồng’ của luồng hiện tại. Đây là một số nguyên khác không.
threading.enumerate ()
Hàm này trả về danh sách tất cả các đối tượng Thread hiện đang tồn tại bao gồm các luồng daemonic, hàm current_thread () tạo một luồng giả và luồng chính và loại trừ các luồng đã kết thúc và các luồng chưa được bắt đầu.
threading.main_thread ()
Hàm này trả về đối tượng Thread chính.
threading.settrace (func)
Khi tất cả các luồng được bắt đầu từ mô-đun phân luồng, hãy đặt một chức năng theo dõi. Trước khi phương thức run () được gọi, hàm này được chuyển tới sys.settrace () cho mỗi luồng.
threading.setprofile (func)
Khi tất cả các luồng được bắt đầu từ mô-đun phân luồng, hãy đặt một chức năng cấu hình. Trước khi phương thức run () được gọi, hàm này được chuyển tới sys.setprofile () cho mỗi luồng.
threading.stack_size ([size])
Hàm này trả về kích thước của ngăn xếp luồng và nó được sử dụng khi tạo luồng mới.
phân luồng.TIMEOUT_MAX
Đây là một hằng số có giá trị lớn nhất được phép cho tham số thời gian chờ của các hàm chặn (Lock.acquire (), RLock.acquire (), Condition.wait (), v.v.).
Mã mẫu
import threading def trace_function(): print("Passing the trace function") def profile(): print("PROFILE THREAD: " + str(threading.current_thread().getName())) class mythread(threading.Thread): def __init__(self, thread_name, thread_ID): threading.Thread.__init__(self) self.thread_name = thread_name self.thread_ID = thread_ID def run(self): print(str(self.thread_ID)); print("ACTIVE THREADS ARE: "+ str(threading.active_count())) print("CURRENT THREAD IS: " + str(threading.current_thread().getName())) my_thread1 = mythread("PP", 500) my_thread2 = mythread("PythonProgram", 1000); print("NAME OF THE MAIN THREAD: " + str(threading.main_thread().getName())) print("IDENTIFICATION OF MAIN THREAD: "+ str(threading.get_ident())) print("STACK SIZE = " + str(threading.stack_size())) print(threading.settrace(trace_function())) threading.setprofile(profile()) my_thread1.start() my_thread2.start() print("LIST OF ENUMERATION: ") print(threading.enumerate()) print("EXIT")
Đầu ra
NAME OF THE MAIN THREAD: MainThread IDENTIFICATION OF MAIN THREAD: 5436 STACK SIZE = 0 Passing the trace function None PROFILE THREAD: MainThread 500 1000LIST OF ENUMERATION: ACTIVE THREADS ARE: 6 [<_MainThread(MainThread, started 5436)>, <Thread(Thread-4, started daemon 1960)>, <Heartbeat(Thread-5, started daemon 6452)>, <HistorySavingThread(IPythonHistorySavingThread, started 4304)>, <mythread(Thread-8, started 8460)>, <mythread(Thread-9, started 4668)>] EXIT CURRENT THREAD IS: Thread-8 ACTIVE THREADS ARE: 5 CURRENT THREAD IS: Thread-9