Quando ho eseguito il codice di seguito, la memoria era in aumento. Tuttavia se ho cancellato time.sleep(3)
, era 0.1
in top
e mai aumentato.Python - perché time.sleep causa perdita di memoria?
Sembra che process
non venga terminato correttamente, ma perché?
Codice (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 il documento ufficiale ha detto 'È necessario chiamare close() o terminate() prima di utilizzare join()' https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing. Pool.join – tanglong
La seguente domanda potrebbe essere interessante per te: http: //stackoverflow.com/questions/7648967/python-multiprocessing-how-to-release-memory-when-a-process-is-done Controlla la risposta di user1914881: "Prova a impostare l'argomento maxtasksperchild sul pool, altrimenti il processo viene riutilizzato più e più volte dal pool in modo che la memoria non venga mai rilasciata. Quando impostato, il processo sarà autorizzato a morire e un nuovo uno creato al suo posto, che ripulirà efficacemente la memoria. " I processi sembrano contenere un po 'di memoria che non viene mai rilasciata nel tuo ciclo while. (Anche se non ne sono sicuro) –
@RobinSpiess Ho provato 'maxtasksperchild', ma non ha aiutato – tanglong