Tôi chưa tìm thấy cách tốt để giám sát việc sử dụng bộ nhớ của tập lệnh Python bằng cách sử dụng multiprocessing
. Cụ thể hơn, nói rằng tôi làm điều này:Đa xử lý Python - Cách giám sát việc sử dụng bộ nhớ?
import time
biglist = range(pow(10, 7))
time.sleep(5)
Việc sử dụng bộ nhớ là 1.3 GB, được đo bằng cả /usr/bin/time -v
và top
. Nhưng bây giờ, nói rằng tôi làm điều này:
import time
from multiprocessing import Pool
def worker(x):
biglist = range(pow(10, 7))
time.sleep(5)
return
Pool(5).map(worker, range(5))
Hiện tại top
báo cáo 5 x 1,3 GB, điều này là chính xác. Nhưng /usr/bin/time -v
vẫn báo cáo 1,3 GB, điều này không có ý nghĩa. Nếu nó đang đo lường mức tiêu thụ của quá trình cha mẹ, sau đó nó sẽ nói 0. Nếu nó được đo lường cha mẹ và trẻ em, sau đó nó phải báo cáo 5 x 1,3 GB. Tại sao nó nói 1,3 GB? Bây giờ, hãy thử copy-on-write:
import time
from multiprocessing import Pool
biglist = range(pow(10, 7))
def worker(x):
time.sleep(5)
return
Pool(5).map(worker, range(5))
Bây giờ /usr/bin/time -v
báo cáo 1,3 GB (lần nữa), điều này là đúng. Nhưng top
báo cáo 6 x 1,3 GB, không chính xác. Với copy-on-write, nó chỉ nên báo cáo 1,3 GB.
Tôi có thể theo dõi đáng tin cậy cách sử dụng bộ nhớ của tập lệnh Python bằng cách sử dụng multiprocessing
?