Tôi tự hỏi về sự cân bằng giữa việc đọc các tệp theo thứ tự so với song song.Tuần tự hoặc song song: cách thích hợp để đọc nhiều tệp trong python là gì?
Giả sử tôi có một tệp có kích thước hàng triệu megabyte mà tôi muốn xử lý, nhưng không đủ bộ nhớ để giữ tất cả chúng cùng một lúc. Để xử lý những tuần tự, tôi có thể làm:
results = [do_something(os.path.join(files, f)) for f in os.listdir(files)]
Hoặc tôi có thể làm điều đó trong song song:
paths = [os.path.join(files, f) for f in os.listdir(files)]
p = multiprocessing.Pool()
try:
results = p.map(do_something, paths)
p.close()
p.join()
except KeyboardInterrupt:
p.terminate()
Nói chung tôi đã cảnh báo chống lại việc thực hiện song song I/O vì đọc đĩa ngẫu nhiên là khá chậm. Nhưng trong trường hợp này là song song với con đường để đi? Hoặc có lẽ một số chiến lược hỗn hợp?
Ngoài ra, tôi nhận thấy rằng phiên bản song song duy trì cấu trúc của thư mục; đó là để nói, đầu ra là đúng thứ tự. Điều đó có nghĩa rằng nó thực sự làm nó tuần tự, hoặc là python chỉ là loại? Chỉnh sửa: Máy xay sinh tố đã xóa câu hỏi thứ hai này. Cảm ơn, Blender!
Cảm ơn sự giúp đỡ.
'p.map' trả về mọi thứ theo thứ tự. Bạn có thể muốn xem 'p.map_async' hoặc 'p.imap_unordered' – Blender
phụ thuộc vào những gì do_something làm – yaccz
Bạn có thể giả sử do_something là một hàm khá đắt tiền phân tích nội dung của tệp. – rhombidodecahedron