メモリを大量に消費する Python アプリケーション (数百 MB から数 GB) があります。
メインアプリケーションを実行する必要がある非常に小さなLinux実行可能ファイルがいくつかあります。
child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
これらの外部ユーティリティを (1 回、長いメイン プロセスの実行の最後に) を使用して実行するsubprocess.Popen
と、OSError: [Errno 12] Cannot allocate memory
.
理由がわかりません... 要求されたプロセスが小さいです。
システムには、さらに多くのシェルに十分なメモリがあります。
私はLinux(Ubuntu 12.10、64ビット)を使用しているので、サブプロセスがForkを呼び出していると思います。
Fork は既存のプロセスを fork するため、消費されるメモリ量が 2 倍になり、失敗しますか??
「コピーオンライト」はどうなりましたか?
フォークせずに (または少なくともメモリをコピーせずに) 新しいプロセスを生成できますか?
関連している:
fork()、vfork()、exec()、clone()の違い
Python subprocess.Popen OSError でエラーが発生: [Errno 12] 一定期間後にメモリを割り当てることができません