Tôi có thể sử dụng bao nhiêu chủ đề trong python?
Bạn có thể định cấu hình số luồng trong ThreadPoolExecutor bằng Python bằng cách đặt đối số max_workers Show
Trong hướng dẫn này, bạn sẽ khám phá cách định cấu hình số lượng luồng công nhân trong nhóm luồng Python Bắt đầu nào Mục lục Cần cấu hình số lượng Worker Threads trong ThreadPoolExecutorThe ThreadPoolExecutor trong Python cung cấp một nhóm các luồng có thể tái sử dụng để thực thi các tác vụ đặc biệt. Bạn có thể gửi tác vụ tới nhóm luồng bằng cách gọi submit() function and passing in the name of the function you wish to execute on another thread. You can also submit tasks by calling the map() và chỉ định . Nhóm luồng có một số luồng công nhân cố định Điều quan trọng là phải giới hạn số lượng luồng công nhân trong nhóm luồng ở số lượng tác vụ không đồng bộ mà bạn muốn hoàn thành, dựa trên tài nguyên trong hệ thống của bạn hoặc trên số lượng tài nguyên bạn định sử dụng trong các tác vụ của mình Ngoài ra, bạn có thể muốn tăng đáng kể số lượng luồng công nhân, với dung lượng lớn hơn trong các tài nguyên bạn định sử dụng Làm cách nào để bạn định cấu hình số lượng luồng công nhân trong ThreadPoolExecutor?Chạy các vòng lặp của bạn bằng cách sử dụng tất cả các CPU, tải xuống cuốn sách MIỄN PHÍ của tôi để tìm hiểu cách thực hiện Cách định cấu hình số lượng luồng công nhânBạn có thể định cấu hình số lượng luồng công nhân trong ThreadPoolExecutor bằng cách đặt max_workerstrong hàm tạoVí dụ 1 2 3 4 5 6 .. . # tạo nhóm luồng và đặt số lượng luồng công nhân executor = ThreadPoolExecutor(max_workers=100) # # tắt nhóm chủ đề người thi hành. tắt máy() Các max_workersđối số là đối số đầu tiên trong hàm tạo và không cần được chỉ định theo tên để được đặt;1 2 3 .. . # tạo nhóm luồng và đặt số lượng luồng công nhân người thi hành = Người thi hành ThreadPool(100) Nếu bạn đang sử dụng trình quản lý ngữ cảnh để tạo nhóm luồng để nó tự động tắt, thì bạn có thể định cấu hình số lượng luồng theo cách tương tự Ví dụ 1 2 3 4 .. . # tạo nhóm luồng bằng trình quản lý bối cảnh và đặt số lượng công nhân với ThreadPoolExecutor(50) as executor: # Nó lấy một số nguyên dương và mặc định là số lượng CPU trong hệ thống của bạn cộng với bốn
Ví dụ: nếu bạn có 2 CPU vật lý trong hệ thống của mình và mỗi CPU đều có siêu phân luồng (phổ biến ở các CPU hiện đại) thì bạn sẽ có 2 CPU vật lý và 4 CPU logic. Python sẽ thấy 4 CPU. Số luồng công nhân mặc định trên hệ thống của bạn khi đó sẽ là (4 + 4) hoặc 8 Nếu con số này lớn hơn 32 (e. g. 16 lõi vật lý, 32 lõi logic, cộng với bốn lõi), mặc định sẽ cắt giới hạn trên thành 32 luồng Thông thường có nhiều luồng hơn CPU (vật lý hoặc logic) trong hệ thống của bạn Lý do cho điều này là các luồng được sử dụng cho các tác vụ liên kết với IO, không phải các tác vụ liên quan đến CPU. Điều này có nghĩa là các luồng được sử dụng cho các tác vụ chờ tài nguyên phản hồi tương đối chậm, chẳng hạn như ổ đĩa cứng, ổ đĩa DVD, máy in, kết nối mạng, v.v. Chúng tôi sẽ thảo luận về ứng dụng tốt nhất của chủ đề trong phần sau Do đó, không có gì lạ khi có hàng chục, hàng trăm và thậm chí hàng nghìn luồng trong ứng dụng của bạn, tùy thuộc vào nhu cầu cụ thể của bạn. Không bình thường khi có nhiều hơn một hoặc vài nghìn chủ đề. Nếu bạn yêu cầu nhiều luồng này, thì các giải pháp thay thế có thể được ưu tiên hơn, chẳng hạn như AsyncIO Bây giờ chúng ta đã biết cách định cấu hình số luồng công nhân trong ThreadPoolExecutor, hãy xem một ví dụ hoạt độngBối rối với API lớp ThreadPoolExecutor? Kiểm tra số lượng chủ đề công nhân mặc địnhHãy kiểm tra xem có bao nhiêu luồng được tạo cho nhóm luồng trên hệ thống của bạn Nhìn vào mã nguồn cho ThreadPoolExecutor , chúng ta có thể thấy rằng số lượng chuỗi worker được chọn theo mặc định được lưu trữ trong thuộc tính _max_workersthuộc tính mà chúng ta có thể truy cập và báo cáo sau khi nhóm luồng được tạoGhi chú, _max_workerslà thành viên được bảo vệ và có thể thay đổi trong tương laiVí dụ bên dưới báo cáo số lượng luồng mặc định trong nhóm luồng trên hệ thống của bạn 1 2 3 4 5 6 7 #Trăn Siêu Nhanh. com # báo cáo số chuỗi worker mặc định trên hệ thống của bạn từ đồng thời. tương lai nhập ThreadPoolExecutor # tạo nhóm luồng với số lượng luồng công nhân mặc định người thi hành = Người thi hành ThreadPool() # báo cáo số lượng luồng công nhân được chọn theo mặc định in(người thi hành. _max_workers) Chạy ví dụ này báo cáo số lượng worker thread được sử dụng theo mặc định trên hệ thống của bạn Tôi có bốn lõi CPU vật lý, tám lõi logic, do đó mặc định là 8 + 4 hoặc 12 luồng 1 12 Có bao nhiêu luồng công nhân được phân bổ theo mặc định trên hệ thống của bạn? Khóa học Python ThreadPoolExecutor miễn phí Tải xuống bảng gian lận API ThreadPoolExecutor của tôi và như một phần thưởng, bạn sẽ có quyền truy cập MIỄN PHÍ vào khóa học email 7 ngày của tôi Khám phá cách sử dụng lớp ThreadPoolExecutor bao gồm cách định cấu hình số lượng công nhân và cách thực thi tác vụ không đồng bộ Tìm hiểu thêm Ví dụ về cấu hình số lượng chủ đề công nhânChúng ta có thể chỉ định trực tiếp số lượng chuỗi công nhân và đây là một ý tưởng hay trong hầu hết các ứng dụng Ví dụ dưới đây trình bày cách định cấu hình 500 luồng công nhân 1 2 3 4 5 6 7 #Trăn Siêu Nhanh. com # định cấu hình và báo cáo số chuỗi worker mặc định từ đồng thời. tương lai nhập ThreadPoolExecutor # tạo nhóm luồng với số lượng lớn luồng công nhân với ThreadPoolExecutor(500) as executor: # báo cáo số lượng chủ đề công nhân in(người thi hành. _max_workers) Chạy ví dụ này sẽ định cấu hình nhóm luồng để sử dụng 500 luồng và xác nhận rằng nó sẽ tạo 500 luồng 1 500 Choáng ngợp trước các API đồng thời của python? Câu hỏi thường gặpPhần này liệt kê các câu hỏi phổ biến liên quan đến số chuỗi worker trong ThreadPoolExecutor .Bạn có câu hỏi nào về việc đặt số lượng chuỗi không? Số lượng chủ đề mặc định trong ThreadPoolExecutor là gì?Số lượng chủ đề mặc định trong ThreadPoolExecutor được tính như sau
Trường hợp số lượng CPU trong hệ thống của bạn được xác định bởi Python và sẽ tính đến siêu phân luồng Ví dụ: nếu bạn có hai lõi CPU, mỗi lõi có siêu phân luồng (phổ biến), thì Python sẽ “thấy” bốn CPU trong hệ thống của bạn Tôi có bao nhiêu CPU hoặc lõi CPU?Bạn có thể kiểm tra số lượng CPU hoặc lõi CPU mà Python có thể nhìn thấy thông qua cpu_count() function in the os module. Ví dụ: chương trình sau sẽ báo cáo số lượng lõi CPU trong hệ thống của bạn mà Python có thể nhìn thấy 1 2 3 # báo cáo số lượng CPU trong hệ thống của bạn hiển thị với Python nhập os in(os. số lượng cpu()) Số lượng luồng trong ThreadPoolExecutor có khớp với số lượng CPU hoặc lõi không?Số lượng worker thread trong ThreadPoolExecutorkhông liên quan đến số lượng CPU hoặc lõi CPU trong hệ thống của bạnBạn có thể định cấu hình số lượng luồng dựa trên số lượng tác vụ bạn cần thực thi, lượng tài nguyên hệ thống cục bộ mà bạn có sẵn (e. g. bộ nhớ), và những hạn chế của tài nguyên mà bạn định truy cập trong nhiệm vụ của mình (e. g. kết nối với máy chủ từ xa) Tôi nên sử dụng bao nhiêu chủ đề?Nếu bạn có hàng trăm tác vụ, có lẽ bạn nên đặt số lượng luồng bằng với số lượng tác vụ Nếu bạn có hàng nghìn tác vụ, có lẽ bạn nên giới hạn số lượng chuỗi ở mức hàng trăm hoặc 1.000 Nếu ứng dụng của bạn dự định sẽ được thực thi nhiều lần trong tương lai, bạn có thể kiểm tra số lượng luồng khác nhau và so sánh thời gian thực hiện tổng thể, sau đó chọn một số luồng mang lại hiệu suất xấp xỉ tốt nhất. Bạn có thể muốn giả lập tác vụ trong các thử nghiệm này bằng thao tác ngủ ngẫu nhiên Số lượng chủ đề công nhân tối đa trong ThreadPoolExecutor là bao nhiêu?Không có số lượng worker thread tối đa trong ThreadPoolExecutor Tuy nhiên, hệ thống của bạn sẽ có giới hạn trên về số luồng bạn có thể tạo dựa trên dung lượng bộ nhớ chính (RAM) hiện có của bạn Trước khi bạn vượt quá bộ nhớ chính, bạn sẽ đạt đến điểm lợi nhuận giảm dần khi thêm các luồng mới và thực hiện nhiều tác vụ hơn. Điều này là do hệ điều hành của bạn phải chuyển đổi giữa các luồng, được gọi là chuyển ngữ cảnh. Với quá nhiều luồng hoạt động cùng một lúc, chương trình của bạn có thể dành nhiều thời gian hơn để chuyển ngữ cảnh hơn là thực sự thực hiện các tác vụ Giới hạn trên hợp lý cho nhiều ứng dụng là hàng trăm luồng đến có lẽ vài nghìn luồng. Hơn vài nghìn luồng trên một hệ thống hiện đại có thể dẫn đến quá nhiều chuyển ngữ cảnh, tùy thuộc vào hệ thống của bạn và loại tác vụ đang được thực thi Bạn có thể chạy nhiều luồng trong Python không?Tóm lại, phân luồng trong Python cho phép tạo nhiều luồng trong một quy trình duy nhất , nhưng do GIL, sẽ không có luồng nào trong số chúng . Phân luồng vẫn là một tùy chọn rất tốt khi chạy đồng thời nhiều tác vụ ràng buộc I/O.
Tôi có thể sử dụng bao nhiêu chủ đề?Trên máy Windows, không có giới hạn nào được chỉ định cho chuỗi . Do đó, chúng tôi có thể tạo bao nhiêu luồng tùy thích, cho đến khi hệ thống của chúng tôi hết bộ nhớ hệ thống khả dụng.
Tôi có thể chạy bao nhiêu chủ đề cho mỗi quy trình?Tham số kernel threads-max kiểm soát số lượng luồng tối đa . Tham số này được xác định trong tệp /proc/sys/kernel/threads-max. Ở đây, đầu ra 63704 chỉ ra rằng hạt nhân có thể thực thi tối đa 63.704 luồng.
Python có thể sử dụng nhiều lõi không?Đa xử lý trong Python cho phép máy tính sử dụng nhiều lõi của CPU để chạy các tác vụ/quy trình song song. Đa xử lý cho phép máy tính sử dụng nhiều lõi của CPU để chạy các tác vụ/quy trình song song. Sự song song hóa này dẫn đến tăng tốc đáng kể trong các tác vụ liên quan đến nhiều tính toán |