2010-12-28 18 views
6

Mam skrypt w Pythonie, który wykonuje niektóre obliczenia. Uruchomienie tego skryptu w konsoli trwa około 7 minut, ale po uruchomieniu jest napisane, że powłoka Java trwa trzy razy dłużej. Używam następujący kod do wykonania skryptu Java:Dłuższe wykonanie przez powłokę Java niż konsola?

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())); 

Czy macie jakieś sugestie dlaczego skrypt Pythona przebiega trzy razy dłużej niż w Javie w konsoli?

Aktualizacja (29.12.2010)

Obliczenia idzie się następująco:

  1. Java wysyła dane do Pythona.
  2. Python odczytuje dane.
  3. Python generuje drzewo decyzyjne - jest to długa operacja.
  4. Python wysyła potwierdzenie, że drzewo jest gotowe.
  5. Java otrzymuje potwierdzenie.

Później jest seria komunikacji między Javą i Pythonem, ale zajmuje to tylko kilka sekund.

Aktualizacja (29.12.2010)

Dziękuję za wszystkie komentarze i sugestie. Zajęło mi jeden dzień roboczy, aby się przekonać, że moje założenie było błędne. Kod, którego użyłem miał "błąd", a w rzeczywistości różne obliczenia były wykonywane w konsoli iw powłoce. Kiedy to naprawiłem, czas obliczeń był taki sam.

Podsumowanie: Czas obliczeń skryptu uruchamianego w konsoli iw powłoce Java jest prawie taki sam. Dodatkowy czas na zainicjowanie komunikacji Java VM i IO jest nieistotny.

+2

Czy jest dużo IO? Czy jest to proces związany z procesorem? – marcog

+0

Jest to proces związany z procesorem. Skrypt odbiera dane tylko na początku, ale robi się to szybko. Następnie skrypt tworzy drzewo decyzyjne, co jest bardzo czasochłonne. – czuk

+0

Co robisz z 'input' i' error'? Odrzucasz go lub przechowujesz w pamięci? I ile danych wyjściowych zaprogramujesz na te strumienie? – rodion

Odpowiedz

2

Spróbuj użyć tego samego kodu bez buforów podręcznych i bufora podręcznego, na wypadek, gdyby opóźnienie zostało wprowadzone przez buforowanie. Nie jestem pewien, jak długo buforowani autorzy czekają, aby się przepłukać, ale przynajmniej ich usunięcie pomogłoby uprościć twój problem.

Powiązane problemy