相关疑难解决方法(0)

了解Python分叉和内存分配错误

我有一个内存密集型的Python应用程序(介于几百MB到几GB之间).
我有几个非常小的Linux可执行文件,主应用程序需要运行,例如

child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
Run Code Online (Sandbox Code Playgroud)

当我运行这些外部实用程序(一次,在长主进程运行结束时)使用subprocess.Popen我有时得到OSError: [Errno 12] Cannot allocate memory.
我不明白为什么......请求的过程很小!
系统有足够的内存用于更多的shell.

我正在使用Linux(Ubuntu 12.10,64位),所以我猜Subprocess调用了Fork.
而Fork分叉我现有的进程,从而使消耗的内存量增加一倍,并且失败了?
"写字复制"怎么了?

我可以在没有fork的情况下生成一个新进程(或者至少没有复制内存 - 重新启动)?

有关:

fork(),vfork(),exec()和clone()之间的区别

fork()和内存分配行为

Python subprocess.Popen错误与OSError:[Errno 12]一段时间后无法分配内存

使用subprocess.Popen的Python内存分配错误

python linux fork

9
推荐指数
1
解决办法
5482
查看次数

标签 统计

fork ×1

linux ×1

python ×1