Проблема выделения пространства кучи более 4 ГБ при вызове Java "из Python" - PullRequest
1 голос
/ 04 января 2010

Я использую os.system call из python для запуска jar-файла. JAR-файл требует большого пространства кучи, и поэтому я выделяю пространство кучи 4 Гб, используя Xmx. Когда я выполню команду "java -Xms4096m -Xmx4096m -jar camXnet.jar net.txt" из командной строки он выполняется правильно, однако, когда я вызываю его из программы на Python через os.system, он работает только в том случае, если выделенная память меньше 4 ГБ, в противном случае он не выполняется. Любые решения?

Под неудачным выполнением я подразумеваю, что появляется командное окно, указывающее, что os.system была вызвана, и затем она исчезает, я проверю код ошибки, если таковой был возвращен. однако никаких проблем не возникает, если для xmx, xms установлено меньшее значение.

Хорошо, я проверил обе версии, и есть разница. Одна из них, вызываемая через python, - это смешанный режим Java HotSpot Client VM, общий доступ, а одна из вызываемых через обычную командную строку - 64-битный сервер Java HotSpot

Как заставить os.system в python вызывать правильный 64-битный сервер.

ОБНОВЛЕНИЕ: я попытался использовать модуль подпроцесса, но версия возврата Java такая же, как и в os.system

Ответы [ 3 ]

2 голосов
/ 04 января 2010

Трудно быть уверенным, не зная более подробно - например, какую ОС вы используете - но я предполагаю, что вы используете 32-битную версию Python, что означает, что при запуске Java вы 32-разрядная версия с ограничением размера кучи 4 ГБ.

Чтобы проверить, так ли это, сравните вывод java -version при запуске из командной строки и при запуске из скрипта Python.

1 голос
/ 23 января 2010

У меня была такая же проблема при запуске 64-битной Java из 32-битного Python. Я решил эту проблему, предложив Дейва Уэбба указание полного пути к 64-битному Java.exe в скрипте python. Это работало нормально, поэтому нет необходимости использовать 64-битный Python

0 голосов
/ 04 января 2010

Просто предложение, но попробуйте использовать subprocess.call () вместо os.system (), предпочтительнее и может решить возникшую проблему. Мне интересно знать, если это так ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...