Hướng dẫn chunksize pool python - trăn hồ bơi cỡ lớn
Bạn có thể thực hiện các tác vụ theo các lô bằng cách sử dụng đối số của Chunksize khi sử dụng phương thức Pool Map ().chunksize” argument when using the Pool map() method. Show
Trong hướng dẫn này, bạn sẽ khám phá ra đối số Chunksize khi thực hiện nhiều nhiệm vụ với nhóm đa xử lý trong Python.chunksize argument when executing multiple tasks with the multiprocessing pool in Python. Bắt đầu nào.
Vấn đề với việc ban hành nhiều nhiệm vụ cho nhómChunksize là gì Chức năng nào hỗ trợ phân chiaPool.map() to apply the same function to each item in an iterable and wait for the results, or with a function like Pool.map_async() that does the same thing asynchronously. Chunksize mặc định là gì? Specifically:
Phần mở rộng Đọc thêm Takeaways Nhóm đa xử lý cho phép chúng tôi phát hành nhiều nhiệm vụ cho nhóm quy trình cùng một lúc.chunksize” argument when issuing tasks. Chunksize là gìChức năng nào hỗ trợ phân chiachunksize” is an argument specified in a function to the multiprocessing pool when issuing many tasks. Chunksize mặc định là gì?
Ví dụ với Chunksize mặc định (Chunksize = none)
Takeaways Nhóm đa xử lý cho phép chúng tôi phát hành nhiều nhiệm vụ cho nhóm quy trình cùng một lúc. Chức năng nào hỗ trợ phân chiaChunksize mặc định là gì?chunksize” argument when issuing multiple tasks. Cách định cấu hình Chunksize
Ví dụ không có chunking (chunksize = 1)
Ví dụ với chundksize (chunksize = n_tasks/n_workers) Phần mở rộng Đọc thêm Takeaways Chunksize mặc định là gì?Cách định cấu hình Chunksizechunksize” has the default value of None. Ví dụ không có chunking (chunksize = 1)Pool.imap() and Pool.imap_unordered(), the default chunksize is 1.
Ví dụ với Chunksize mặc định (Chunksize = none)Pool.map(), Pool.starmap() and the asynchronous versions of these functions, the default is not 1. Ví dụ với chundksize (chunksize = n_tasks/n_workers)None, a default chunksize is calculated based on the length of the provided iterable. Phần mở rộngmultiprocessing.Pool class. Đọc thêmPool class where the default chunksize is calculated.
Tính toán liên quan đến việc chia số lượng các mục trong ITBER (ví dụ: số lượng nhiệm vụ được cấp) cho số lượng quy trình con công nhân nhân với bốn. Nếu có một phần còn lại, thì một người được thêm vào phần mềm, để làm tròn cho các nhiệm vụ bổ sung. Bạn có thể nhớ lại rằng hàm divmod () tích hợp sẽ trả về kết quả chia một số cho một số khác (thương số) cũng như phần còn lại.divmod() function will return the result of dividing one number by another (quotient) as well as the remainder. Chúng ta có thể chứng minh tính toán này với một ví dụ nhỏ. Hãy xem xét một nhóm đa xử lý với 2 quy trình nhân viên trẻ em và cuộc gọi đến MAP () với một mục có thể có 500.200 mục. Các đoạn trong tình huống này sẽ được tính toán như sau:
Chúng ta có thể định cấu hình giá trị chunksize tùy chỉnh. Chúng ta phải giả định rằng tính toán được sử dụng cho Chunksize mặc định đã được triển khai vì nó hoạt động tốt trong hầu hết các tình huống. Điều này có nghĩa là bất kỳ khối tùy chỉnh nào chúng tôi đặt nên được so sánh với mặc định để đảm bảo nó cải thiện hiệu suất. Trên thực tế, không có hướng dẫn chung nào về cách đặt ra đối số của Chunksize.chunksize” argument. Thay vào đó, tôi khuyên bạn nên sử dụng một số thử nghiệm và lỗi để khám phá những gì hoạt động tốt cho các ứng dụng cụ thể của bạn. Một số giá trị để khám phá có thể là:
Ngoài ra, bạn có thể thử một thang đo nhật ký (đơn đặt hàng có độ lớn) giữa 1 và số lượng vật phẩm trong điều kiện được cung cấp để giúp nhanh chóng loại bỏ một giá trị hoạt động tốt. Ví dụ:
Bây giờ chúng tôi đã quen thuộc với Chunksize, hãy để Lôi nhìn vào một số ví dụ đã làm việc. Ví dụ không có chunking (chunksize = 1)Chúng ta có thể khám phá hiệu ứng của một phần của một. Trong ví dụ này, chúng tôi sẽ xác định một nhiệm vụ đơn giản có một đối số, chặn trong giây lát để mô phỏng công việc và trả về một giá trị. Sau đó, chúng ta có thể đưa ra nhiều cuộc gọi đến chức năng này với các đối số khác nhau và đặt một đoạn của một và xem xét ví dụ mất bao lâu để thực hiện. Điều này sẽ cung cấp một điểm so sánh với các giá trị khác nhau sau này. Đầu tiên, chúng ta có thể xác định một chức năng để thực thi trên nhóm đa xử lý. Hàm sẽ lấy một đối số số nguyên, sẽ tạo ra một giá trị ngẫu nhiên trong khoảng từ 0 đến 1, chặn trong từ 1 đến 2 giây, sau đó trả về giá trị được tạo thêm cho đối số được cung cấp. Hàm nhiệm vụ () bên dưới thực hiện điều này.task() function below implements this.
Tiếp theo, trong quy trình chính sẽ tạo ra một nhóm đa xử lý bằng cách sử dụng cấu hình mặc định của tất cả các CPU logic trong hệ thống. Bạn có thể tìm hiểu thêm về cấu hình mặc định của nhóm đa xử lý trong hướng dẫn:
Chúng tôi sẽ sử dụng giao diện Trình quản lý ngữ cảnh để đảm bảo nhóm được đóng tự động cho chúng tôi sau khi chúng tôi hoàn thành.
Bạn có thể tìm hiểu thêm về giao diện Trình quản lý ngữ cảnh cho nhóm trong hướng dẫn:
Tiếp theo, chúng tôi sẽ phát hành 100 cuộc gọi cho hàm T dụng cụ tùy chỉnh () của chúng tôi với các giá trị số nguyên từ 0 đến 99.task() function with integer values between 0 and 99. Chúng tôi sẽ sử dụng hàm Bản đồ đồng bộ () để ban hành các tác vụ và theo số 1 và lặp lại các giá trị trả về sau khi tất cả các tác vụ đã hoàn thành.
Bạn có thể tìm hiểu thêm về giao diện Trình quản lý ngữ cảnh cho nhóm trong hướng dẫn:Pool.map() function in the tutorial:
Tiếp theo, chúng tôi sẽ phát hành 100 cuộc gọi cho hàm T dụng cụ tùy chỉnh () của chúng tôi với các giá trị số nguyên từ 0 đến 99.
Chạy ví dụ đầu tiên tạo ra nhóm đa xử lý với cấu hình mặc định. Tiếp theo, 100 nhiệm vụ được cấp cho nhóm đa xử lý với số lượng 1. Các nhiệm vụ được cấp cho người lao động cùng một lúc, được thực hiện và kết quả đã được trả lại. Không có hàng loạt nhiệm vụ ban hành cho các nhiệm vụ nội bộ được gửi cho công nhân được thực hiện. Tất cả các tác vụ được hoàn thành, sau đó các giá trị hoàn trả được trả lại cho người gọi và đi qua, báo cáo tất cả các giá trị. Một ví dụ cắt ngắn của đầu ra được cung cấp dưới đây. Lưu ý, kết quả sẽ khác nhau mỗi khi ví dụ được chạy vì sử dụng các số ngẫu nhiên. Trong trường hợp này, ví dụ mất khoảng 19,9 giây để hoàn thành trên hệ thống của tôi.
Tiếp theo, hãy để Lừa xem xét một ví dụ về việc sử dụng Chkksize mặc định. Ví dụ với Chunksize mặc định (Chunksize = none)Chúng ta có thể khám phá bằng cách sử dụng các đoạn mặc định được sử dụng bởi map (), starmap () và các phiên bản không đồng bộ của chúng.map(), starmap() and their asynchronous versions. Trong ví dụ này, chúng tôi có thể cập nhật ví dụ trước để đặt đối số của Chunksize thành không có đối số nào, giống như bỏ qua hoàn toàn đối số Chunksize.chunksize” argument to None, the same as omitting the chunksize argument completely. Ví dụ:
Trong ví dụ này, chúng tôi có thể cập nhật ví dụ trước để đặt đối số của Chunksize thành không có đối số nào, giống như bỏ qua hoàn toàn đối số Chunksize. Ví dụ:
Tôi có 8 CPU logic trong hệ thống của mình, do đó 8 nhân viên trẻ em theo mặc định. Do đó, trên hệ thống của tôi, các trò chơi mặc định trong trường hợp này sẽ được tính là:
Chunksize, Extra = DivMod (100, 32) Chunksize, thêm = 3, 4
Chạy ví dụ đầu tiên tạo ra nhóm đa xử lý với cấu hình mặc định. Tiếp theo, 100 nhiệm vụ được cấp cho nhóm đa xử lý với số lượng 1. Các nhiệm vụ được cấp cho người lao động cùng một lúc, được thực hiện và kết quả đã được trả lại. Tất cả các tác vụ được hoàn thành, sau đó các giá trị hoàn trả được trả lại cho người gọi và đi qua, báo cáo tất cả các giá trị. Một ví dụ cắt ngắn của đầu ra được cung cấp dưới đây. Lưu ý, kết quả sẽ khác nhau mỗi khi ví dụ được chạy vì sử dụng các số ngẫu nhiên. Trong trường hợp này, ví dụ mất khoảng 19,9 giây để hoàn thành trên hệ thống của tôi. ...
Tiếp theo, hãy để Lừa xem xét một ví dụ về việc sử dụng Chkksize mặc định. Ví dụ với chundksize (chunksize = n_tasks/n_workers)Chúng ta có thể khám phá hiệu quả của việc sử dụng một phần chay chẵn, đó là sự phân chia thậm chí số lượng nhiệm vụ cho các quy trình của công nhân trẻ em. Trong trường hợp này, chúng tôi có thể cập nhật ví dụ trước để tính toán một phần mềm dựa trên số lượng các mục trong ITEBELBER và số lượng quy trình nhân viên trẻ em trong nhóm.
Hãy nhớ lại rằng hàm math.ceil () làm tròn một số điểm nổi lên đến số nguyên tiếp theo.math.ceil() function rounds a floating point number up to the next integer. Trên hệ thống của tôi, tôi có 8 CPU logic, do đó 8 nhân viên trẻ em theo mặc định. Do đó, thậm chí các trò hề trong trường hợp này sẽ là:
Sau đó chúng tôi sẽ báo cáo các giá trị là xác nhận.
Hãy nhớ lại rằng hàm math.ceil () làm tròn một số điểm nổi lên đến số nguyên tiếp theo.
& nbsp; & nbsp; & nbsp; & nbsp; với pool () aspool: & NBSP; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & NBSP; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & NBSP;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;Chạy ví dụ đầu tiên tạo ra nhóm đa xử lý với cấu hình mặc định.
Một ví dụ cắt ngắn của đầu ra được cung cấp dưới đây. Lưu ý, kết quả sẽ khác nhau mỗi khi ví dụ được chạy vì sử dụng các số ngẫu nhiên. Trong trường hợp này, ví dụ này mất khoảng 20,3 giây để hoàn thành trên hệ thống của tôi, vẫn còn tệ hơn là sử dụng số lượng 1, mặc dù tốt hơn một chút so với phần mặc định trong trường hợp này.Chunksize = 13, n_workers = 8
Nếu bạn khám phá bất kỳ ví dụ nào trong số này, hãy cho tôi biết. Tôi rất thích xem những gì bạn nghĩ ra.Đọc thêm Phần này cung cấp các tài nguyên bổ sung mà bạn có thể thấy hữu ích. Ảnh của Austin Neill trên unplash |