以下のコードを実行すると、メモリが増加していました。しかし、私がtime.sleep(3)
を削除した場合、0.1
はtop
であり、決して増加しませんでした。Python - なぜtime.sleepがメモリリークを引き起こすのですか?
process
は正しく終了していないようですが、なぜですか?
コード(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公式ドキュメントでは、「join()を使用する前にclose()またはterminate()を呼び出す必要があります」とhttps://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing。 Pool.join – tanglong
次の質問は面白いかもしれません:http://stackoverflow.com/questions/7648967/python-multiprocessing-how-to-release-memory-when-a-process-is-done user1914881: "プールのmaxtasksperchild引数を設定してください。そうしないと、プロセスがプールによって何度も再利用され、メモリーが解放されることはありません。それはメモリを効果的にクリーンアップします。プロセスはあなたのwhileループで決して解放されない少しのメモリを保持しているようです。 (私は確信していませんが) –
@RobinSpiess私は 'maxtasksperchild'を試しましたが、助けてくれませんでした。 – tanglong