Đa luồng trong Python cho phép CPU chạy đồng thời các phần [luồng] khác nhau của một quy trình để tối đa hóa việc sử dụng CPU
- Bởi Aditya Singh
Đa luồng cho phép CPU chạy đồng thời các phần [luồng] khác nhau của một quy trình. Nhưng điều đó có nghĩa gì? . Một luồng của trò chơi có thể chịu trách nhiệm giao tiếp với máy chủ và hiển thị đồ họa. Chuỗi giao tiếp yêu cầu tính toán tối thiểu và sẽ mất một số thời gian chờ, mặt khác, chuỗi kết xuất cần nhiều tính toán với thời gian chờ tối thiểu. Đa luồng cho phép CPU chạy luồng kết xuất trong khi luồng giao tiếp đang chờ phản hồi từ máy chủ, tăng mức sử dụng CPU.
Lưu ý rằng không nên nhầm lẫn đa luồng với đa xử lý. CPU hiện đại có nhiều lõi; . Tuy nhiên, đa luồng nhằm mục đích tối đa hóa việc sử dụng từng lõi này bằng cách chạy nhiều luồng đồng thời. Đa luồng rất hữu ích khi tác vụ có IO hoặc các hoạt động mạng liên quan đến việc chờ đợi; . Tiếp tục ví dụ về trò chơi trực tuyến, luồng kết xuất của hầu hết các trò chơi được chạy song song trên GPU có hàng nghìn lõi, mỗi luồng hiển thị các khía cạnh khác nhau của trò chơi. Trong khi các luồng giao tiếp và IO được chạy đồng thời trên CPU.
Đa luồng trong Python
Mô-đun
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]2 đi kèm với thư viện Python tiêu chuẩn, vì vậy không cần cài đặt bất cứ thứ gì. Theo mặc định, các chương trình Python của bạn có một luồng duy nhất, được gọi là luồng chính. Bạn có thể tạo các luồng bằng cách chuyển một hàm tới hàm tạo
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]3 hoặc bằng cách kế thừa lớp
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]4 và ghi đè phương thức
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]5
TUYỆT VỜI
Đăng ký hàng tuần của bạn về những gì đang xảy ra trong công nghệ mới nổi
Đăng ký
Sử dụng Trình tạo Thread[]
import threading import time def useless_function[seconds]: print[f'Waiting for {seconds} second[s]', end = "\n"] time.sleep[seconds] print[f'Done Waiting {seconds} second[s]'] start = time.perf_counter[] t = threading.Thread[target=useless_function, args=[1]] t.start[] print[f'Active Threads: {threading.active_count[]}'] t.join[] end = time.perf_counter[] print[f'Finished in {round[end-start, 2]} second[s]']
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]
Hai chủ đề đang hoạt động là chủ đề chính và chủ đề
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]6 mà bạn vừa tạo. Phương thức
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]7 chặn luồng thực thi cho đến khi luồng
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]8 kết thúc. Nếu bạn loại bỏ lệnh gọi
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]7, luồng chính sẽ kết thúc trước
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]8 và đầu ra sẽ giống như
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]1
Mặc dù phương thức
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]11 được gọi sau khi bắt đầu luồng
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]8, nhưng nó kết thúc thực thi trước khi nó. Điều này xảy ra vì bộ xử lý chạy luồng chính trong khi luồng
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]8 đang ngủ. Nếu bạn thêm độ trễ 1 giây trước nó, thì nó sẽ được thực thi sau khi luồng
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]8 kết thúc.
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]6
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]7
Tạo lớp chủ đề của bạn
Lớp con
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]4 chỉ nên ghi đè phương thức
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]5 và hàm tạo
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]17. Và nếu hàm tạo bị ghi đè thì hàm tạo của lớp cơ sở,
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]18, nên được gọi trước khi thực hiện bất kỳ điều gì khác
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]2____23
Bây giờ bạn đã biết cách chạy mã đồng thời bằng cách sử dụng đa luồng trong Python, nhưng tại sao bạn lại muốn làm như vậy? .
Mã chưa được tối ưu hóa-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]4
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]5Mã đa luồng
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]6
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]0
Hai vòng lặp có thể được thay thế bằng đối tượng từ
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]1
Đối tượng
-----------------------------Output----------------------------- Waiting for 1 second[s] Active Threads: 2 Done Waiting 1 second[s] Finished in 1.0 second[s]61 tạo một luồng cho mỗi lệnh gọi hàm và chặn thực thi luồng chính cho đến khi mỗi luồng này kết thúc.
Trong mã không được tối ưu hóa, các yêu cầu GET diễn ra tuần tự và CPU là lý tưởng giữa các yêu cầu. Khi mỗi yêu cầu GET xảy ra trong luồng riêng biệt của nó, tất cả chúng được thực thi đồng thời và CPU luân phiên giữa chúng thay vì lý tưởng.
Người giới thiệuĐể tìm hiểu thêm về mô-đun luồng Python, hãy tham khảo các tài nguyên sau
- Tài liệu
- GitHub
Nhiều câu chuyện AIM tuyệt vời hơn
Tại sao không ai coi trọng AI sáng tạo?
Chính phủ Meta-Ấn Độ chôn cất chiếc rìu, đoàn kết vì đổi mới AI
7 lựa chọn thay thế ChatGPT hàng đầu
CEAT được chứng nhận là Công ty tốt nhất cho các nhà khoa học dữ liệu
Tư Mã. hành trình trở nên tốt hơn gấp 10 lần so với Qualcomm và Nvidia của ai
Một người đam mê học máy với sở trường tìm kiếm các mẫu. Trong thời gian rảnh rỗi, tôi thích khám phá thế giới sách phi hư cấu và các bài tiểu luận bằng video