在Python中内存高效调用外部命令

时间:2014-06-30 18:02:12

标签: solaris python-2.6

我有一个python脚本需要通过调用很多外部命令来加载大量数据。 几个小时后,这总是崩溃:

....
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
File "/usr/lib/python2.6/subprocess.py", line 621, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1037, in _execute_child
self.pid = os.fork()
OSError: [Errno 12] Not enough space
abort: Not enough space

...即使机器确实有比脚本更多的可用内存 实际上正在使用。

根本原因似乎是每个fork()实际上需要的内存是通过调用exec()立即释放的父进程的两倍。 (见:http://www.oracle.com/technetwork/server-storage/solaris10/subprocess-136439.html) ...在我的情况下,上面的情况更糟,因为我在多个线程中加载数据。

那么您是否看到了解决此问题的任何创造性方法?

1 个答案:

答案 0 :(得分:-1)

您是否需要启动外部命令或分叉您正在运行的命令?

如果您只需要运行另一个脚本,请尝试:

subprocess.call()

subprocess.call(["ls", "-l"])

os.fork根据您的使用情况复制您当前的环境,这可能是不必要的。

在使用之前不要忘记导入子进程模块。

更多信息: