我有一个内存密集型 Python 应用程序(几百 MB 到几 GB 之间)。
我有几个非常小的 Linux 可执行文件,主要应用程序需要运行,例如
child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
当我运行这些外部实用程序(一次,在长时间的主进程运行结束时)时,subprocess.Popen
有时会得到OSError: [Errno 12] Cannot allocate memory
.
我不明白为什么......请求的过程很小!
系统有足够的内存容纳更多的 shell。
我使用的是 Linux(Ubuntu 12.10,64 位),所以我猜子进程调用 Fork。
Fork 分叉了我现有的进程,从而使消耗的内存量增加了一倍,并且失败了??
“写时复制”发生了什么?
我可以在没有 fork 的情况下生成一个新进程(或者至少不复制内存 - 从新开始)?
有关的:
fork()、vfork()、exec()和clone()的区别
Python subprocess.Popen 出现 OSError 错误:[Errno 12] 一段时间后无法分配内存