Tôi đã viết một thuật toán lấy dữ liệu không gian địa lý và thực hiện một số bước. Dữ liệu đầu vào là một shapefile của đa giác và raster covariate cho một khu vực nghiên cứu raster lớn (~ 150 triệu điểm ảnh). Các bước thực hiện như sau:Thiết kế đa xử lý Python
- điểm mẫu từ bên trong đa giác của shapefile
- Đối với mỗi điểm lấy mẫu, giá trị chiết xuất từ rasters covariate
- Xây dựng một mô hình dự đoán trên các điểm lấy mẫu
- Extract đồng biến cho các điểm lưới mục tiêu
- Áp dụng mô hình dự đoán cho lưới mục tiêu
- Ghi dự đoán cho một tập hợp các lưới đầu ra
Toàn bộ quá trình cần được lặp lại nhiều lần (nói 100) nhưng mỗi lần lặp lại hiện mất hơn một giờ khi được xử lý theo chuỗi. Đối với mỗi lần lặp lại, phần tốn nhiều thời gian nhất là bước 4 và 5. Vì lưới mục tiêu quá lớn nên tôi đã xử lý nó một khối (nói 1000 hàng) tại một thời điểm.
Tôi có CPU 6 lõi với RAM 32 Gb, vì vậy trong mỗi lần lặp lại, tôi đã sử dụng mô-đun multiprocessing
của Python với đối tượng Pool
để xử lý đồng thời một số khối (bước 4 và 5) và sau đó viết đầu ra (các dự đoán) cho tập hợp chung của các lưới đầu ra bằng cách sử dụng một hàm gọi lại gọi một hàm đầu ra toàn cầu. Điều này dường như hoạt động, nhưng không nhanh hơn (thực sự, nó có thể chậm hơn) so với xử lý từng khối trong chuỗi.
Vì vậy, câu hỏi của tôi là, có cách nào hiệu quả hơn để làm điều đó không? Tôi quan tâm đến lớp học đa năng của mô-đun đa xử lý là Queue
, nhưng tôi không thực sự chắc chắn nó hoạt động như thế nào. Ví dụ, tôi tự hỏi nếu nó có hiệu quả hơn để có một hàng đợi thực hiện các bước 4 và 5 sau đó vượt qua các kết quả đến một hàng đợi khác mà thực hiện bước 6. Hoặc là điều này ngay cả những gì Queue là?
Mọi con trỏ sẽ được đánh giá cao.
RSS tối đa trong toàn bộ quá trình là gì? Có lẽ nó sẽ được dễ dàng hơn để chỉ cần chạy điều này sáu lần đồng thời nếu nó sẽ tất cả phù hợp với bộ nhớ ... – sarnold
Bạn có thực sự CPU bị ràng buộc? Điều này trông giống như một vấn đề ràng buộc I/O. – stark
@ Sarnold: Nó sẽ không hoàn toàn phù hợp với trí nhớ, đó là vấn đề ... – hendra