Aşağıdaki kodu çalıştırdığımda bellek artıyordu. Ancak, time.sleep(3)
'u sildiysem top
numaralı telefondan 0.1
oldu ve hiçbir zaman artmadı.Python - time.sleep neden bellek sızıntısına neden oluyor?
process
doğru şekilde sonlandırılmıyor gibi görünüyor, ancak neden?
Kodu (Python 2.7.11
):
import time
import multiprocessing
def process():
#: FIXME
time.sleep(3)
return
def main():
pool = multiprocessing.Pool(processes=10)
while 1:
pool.apply_async(process)
pool.close()
pool.join()
if __name__ == '__main__':
main()
@vks resmi belgede '' join() 'https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing kullanmadan önce close() veya terminate() yöntemini çağırmalıdır. Pool.join – tanglong
Aşağıdaki soru sizin için ilginç olabilir: http: //stackoverflow.com/questions/7648967/python-multiprocessing-how-to-release-memory-when-a-process-is-done Cevabı kontrol edin user1914881: "Havuzda maxtasksperchild argümanını ayarlamayı deneyin. Eğer yapmazsanız, bu işlem havuz tarafından tekrar tekrar açılır ve böylece bellek asla serbest bırakılmaz. Ayarlandığında, işlemin ölmesine ve yeni onun yerine bir tane yaratılmış, bu da hafızayı etkin bir şekilde temizleyecek. ” Süreçler, hiçbir zaman 1 döngüsünde asla piyasaya sürülmeyen bir hafıza tutuyor gibi görünüyor. (Emin değilim) –
@RobinSpiess 'maxtasksperchild' denedim ama – tanglong