Я занимаюсь разработкой биоинформатики. У меня есть python script, который в какой-то момент вызывает программу для выполнения дорогостоящего процесса (выравнивание последовательности... требует много вычислительной мощности и памяти). Я называю это с помощью subprocess.Popen. Когда я запускаю его на тестовом диске, он завершается и заканчивается нормально. Однако, когда я запускаю его в полном файле, где он должен будет делать это несколько раз для разных наборов входов, он умирает. Подпроцесс бросает:
OSError: [Errno 12] Cannot allocate memory
Я нашел несколько ссылок здесь и здесь и здесь к аналогичным проблемам, но я не уверен, что они применяются в моем случае.
По умолчанию выравниватель последовательности попытается запросить 51000M памяти. Он не всегда так много использует, но может. Когда полный вход загружен и обработан, этого много не доступно. Тем не менее, ограничение количества, которое он запрашивает или будет пытаться использовать на более низкой сумме, которая может быть доступна при запуске, дает мне такую же ошибку. Я также пробовал работать с shell = True и тем же.
Это прослушивало меня уже несколько дней. Спасибо за любую помощь.
Изменить: расширение трассировки:
File "..../python2.6/subprocess.py", line 1037, in _execute_child
self.pid=os.fork()
OSError: [Errno 12] Cannot allocate memory
выдает ошибку.
Edit2: Запуск в python 2.6.4 на 64-разрядном ubuntu 10.4