У меня есть приложение Python с интенсивной памятью (от сотни МБ до нескольких ГБ).
У меня есть несколько ОЧЕНЬ МАЛЕНЬКИХ Linux-исполняемых файлов, которые нужно запустить главному приложению, например.
child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
Когда я запускаю эти внешние утилиты (один раз, в конце длинного основного процесса), используя subprocess.Popen
, я иногда получаю OSError: [Errno 12] Cannot allocate memory
.
Я не понимаю, почему... Запрошенный процесс крошечный!
В системе достаточно памяти для многих других оболочек.
Я использую Linux (Ubuntu 12.10, 64 бит), поэтому я думаю, что подпроцесс вызывает Fork.
И Fork разворачивает мой существующий процесс, тем самым удваивая количество потребляемой памяти и терпя неудачу?
Что случилось с копией на запись?
Можно ли создать новый процесс без вилки (или, по крайней мере, без копирования памяти - начиная с нуля)?
по теме:
Разница между fork(), vfork(), exec() и clone()
fork() и поведение распределения памяти
Ошибка выделения памяти Python с помощью подпроцесса. Открытие