Tôi đang làm việc với mclapply
từ gói multicore
(trên Ubuntu) và tôi đang viết một chức năng yêu cầu kết quả của mclapply(x, f)
được trả lại theo thứ tự (tức là, f(x[1]), f(x[2]), ...., f(x[n])
).Được bảo đảm chắc chắn sẽ trả lại kết quả theo thứ tự?
# multicore doesn't work on Windows
require(multicore)
unlist(mclapply(
1:10,
function(x){
Sys.sleep(sample(1:5, size = 1))
identity(x)}, mc.cores = 2))
[1] 1 2 3 4 5 6 7 8 9 10
Đoạn mã trên dường như ngụ ý rằng mclapply
trả về kết quả theo thứ tự giống như lapply
. Tuy nhiên, nếu giả định này là sai, tôi sẽ phải dành một thời gian dài refactoring mã của tôi, vì vậy tôi hy vọng để có được sự đảm bảo từ một ai đó quen thuộc hơn với gói này/song song tính toán giả định này là chính xác.
Có an toàn để giả định rằng mclapply
luôn trả về kết quả theo thứ tự, bất kể các đối số tùy chọn được đưa ra?
Các tài liệu không chỉ ra rằng kết quả có thể đến trong scrambled, và nó là rõ ràng rằng đây là một song song phiên bản 'lapply', trả về danh sách được sắp xếp làm đầu vào. Bạn có thể chạy một phần mã của bạn ở chế độ tuần tự và song song và xem điều này có phù hợp với trường hợp cụ thể của bạn hay không. Tôi sẽ mạo hiểm một dự đoán rằng nó. –