Python multiprocessing
modülünü kullanarak birden çok işçiyi kullanan bir yardımcı programım var ve benim istediğim her şeyi yapan mükemmel memory_profiler
yardımcı programı aracılığıyla bellek kullanımını izleyebilmeyi istiyorum - özellikle zaman içinde bellek kullanımını örnekleme ve çizim Son sonuç (Bu soru için satır içi bellek profili ile ilgilenmiyorum).Python çoklu işlem ve memory_profiler kullanarak birden çok alt işlem nasıl oluşturulur?
Bu soruyu ayarlamak için
memory_profiler
kitaplığında verilen
example benzer bellek ayıran bir alt işlevi olan bir komut dosyası, daha basit bir sürümünü oluşturduk. aşağıdaki gibi işçi şu şekildedir:
import time
X6 = 10 ** 6
X7 = 10 ** 7
def worker(num, wait, amt=X6):
"""
A function that allocates memory over time.
"""
frame = []
for idx in range(num):
frame.extend([1] * amt)
time.sleep(wait)
del frame
4 işçi sıralı iş yükünü Verilen:
if __name__ == '__main__':
worker(5, 5, X6)
worker(5, 2, X7)
worker(5, 5, X6)
worker(5, 2, X7)
her işçi çalıştırmak birbiri ardına sahip mprof
benim komut profil çalıştırılabilir sürer 70 saniyeler. olarak çalıştırmak komut dosyası, aşağıdaki gibidir: Bu işçiler multiprocessing
ile paralel gitmesi Having senaryo yavaş çalışan bir işçi kadar yavaş bitirmek anlamına gelir
:
$ mprof run python myscript.py
aşağıdaki bellek kullanımı grafiği üretir (25 saniye).
import multiprocessing as mp
if __name__ == '__main__':
pool = mp.Pool(processes=4)
tasks = [
pool.apply_async(worker, args) for args in
[(5, 5, X6), (5, 2, X7), (5, 5, X6), (5, 2, X7)]
]
results = [p.get() for p in tasks]
Bellek profilci gerçekten çalışır, ya da en azından mprof
kullanarak hata var ama sonuç garip biraz şunlardır: şu şekildedir: O script
hızlı bir bakış at Etkinlik İzleyicisi, aslında, her bir alt işlem için bir tane olmak üzere, mprof
için bir tane olan python myscript.py
için bir tane olmak üzere 6 Python işlemi olduğunu gösterir. mprof
'un yalnızca python myscript.py
işleminin bellek kullanımını ölçtüğü anlaşılıyor.
memory_profiler
kütüphane
tüm çocuk (çatal) süreçlerin bellek kullanımını özetliyor -C
bayrağı keşfetmek did mprof
komut dosyası aracılığıyla okuduktan sonra DÜZENLEME
.
Ama ne aradığım zaman içinde her bir alt sürecin bellek kullanımı tüm işçileri (ve usta) çizmek böylece aşağıdaki gibidir: Bu (çok gelişmiş) grafiğinin yol açar Aynı grafikte. Benim düşüncem memory_usage
'un her bir alt işlemine farklı bir günlük dosyasına yazılmalı, sonra görselleştirebiliyorum.
Bu soru, ilgilenen varsa https://github.com/fabianp/memory_profiler/issues/118 adresinden GitHub'daki geliştiricilerle tartışılmaktadır. – bbengfort