Có bao nhiêu luồng có thể chạy đồng thời Python?

Đ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

E-mail

Đă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

Có bao nhiêu luồng có thể chạy đồng thời?

Mỗi lõi chỉ có thể chạy 1 luồng tại một thời điểm, i. e. siêu phân luồng bị vô hiệu hóa. Vì vậy, bạn có thể có tối đa tổng số 20 luồng thực thi song song, một luồng trên mỗi CPU/lõi . Điều đó có thể có nghĩa là 20 tác vụ đơn luồng, 1 tác vụ đa luồng với 20 luồng hoặc bất kỳ tác vụ nào ở giữa.

Các luồng trong Python có đồng thời không?

Cả đa luồng và đa xử lý đều cho phép mã Python chạy đồng thời .

Nhiều luồng có thể chạy đồng thời không?

Trong một quy trình hoặc chương trình, chúng ta có thể chạy nhiều luồng đồng thời để cải thiện hiệu suất. Các luồng, không giống như quy trình hạng nặng, nhẹ và chạy bên trong một quy trình duy nhất – chúng chia sẻ cùng một không gian địa chỉ, tài nguyên được phân bổ và môi trường của quy trình đó.

Chủ Đề