Более длительное выполнение через оболочку Java, чем консоль? - PullRequest
6 голосов
/ 28 декабря 2010

У меня есть скрипт на Python, который делает некоторые вычисления. Когда я запускаю этот скрипт в консоли, он занимает около 7 минут, но когда я запускаю его, думая, что оболочка Java, это занимает в три раза больше времени. Я использую следующий код для выполнения скрипта в Java:

this.p = Runtime.getRuntime().exec("script.py --batch", envp);

this.input = new BufferedReader(new InputStreamReader(p.getInputStream()));
this.output = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
this.error = new BufferedReader(new InputStreamReader(p.getErrorStream()));

Есть ли у вас какие-либо предположения, почему сценарий Python в Java выполняется в три раза дольше, чем в консоли?

обновление (29.12.2010)

Вычисление происходит следующим образом:

  1. Java отправляет данные в Python.
  2. Python читает данные.
  3. Python генерирует дерево решений --- это длинная операция.
  4. Python отправляет подтверждение, что дерево готово.
  5. Java получает подтверждение.

Позже происходит серия соединений между Java и Python, но это занимает всего несколько секунд.

обновление (29.12.2010)

Спасибо за все ваши комментарии и предложения. Потребовался один рабочий день, чтобы понять, что мое предположение было неверным. Код, который я использовал, имел «ошибку», и на самом деле различные вычисления выполнялись в консоли и в оболочке. Когда я исправил это, время вычислений было таким же.

Сводка : время вычисления скрипта, запущенного в консоли и в оболочке Java, практически одинаково. Дополнительное время для инициализации взаимодействия Java VM и IO незначительно.

1 Ответ

2 голосов
/ 28 декабря 2010

Попробуйте использовать один и тот же код без BufferedReaders и BufferedWriters, если есть задержка, вызванная буферизацией. Я не уверен, как долго буферизованные авторы ждут сброса, но, по крайней мере, удаление их поможет упростить вашу проблему.

...