2010-11-01 10 views
5

Przepraszam, jeśli moje pytanie brzmi noob. Używam Django 1.2 z pgsql 8.4 i muszę uruchamiać program Java po pobraniu danych wejściowych od użytkownika, wykonać pewne obliczenia i zwrócić wyniki z powrotem do użytkownika.przekazywanie danych między java i pytonem

Czy mogę wiedzieć, jaki jest najlepszy sposób przekazywania danych między Java i Python Django, tak, że powyższy scenariusz jest pod opieką? Słyszałem o Jythonie, ale zgodnie z dokumentacją Django, wymaga on rozszerzenia jython-Django, ale obecnie nie obsługuje django 1.2.x. Czy powinienem przekazywać dane za pomocą standardowego wyjścia?

dziękuję ludziom za wysłuchanie mnie.

Odpowiedz

3

Użyj subprocess i uruchom program Java jako prosty podproces. Jest bardzo, bardzo prosty i dość szybki.

Jeśli potrzebujesz czegoś bardziej skalowalnego, powinieneś popatrzeć na tworzenie serwera glassfish za pomocą kodu Java, aby Twój Python mógł wysyłać żądania usług internetowych do Javy. Jest to bardziej skalowalne, ale także więcej pracy.

+0

@ Lott, dzięki za sugestie. W odniesieniu do podprocesu, jak mogę zwrócić obliczone wyniki z powrotem do Pythona? – goh

+0

@goh: Kanały komunikacji są ograniczone tylko twoją wyobraźnią. Zacznij od plików. Zwykłe stare pliki. Django zapisuje plik, twoja aplikacja Java odczytuje plik i zapisuje nowy plik. Możesz użyć rur. Prawdopodobnie możesz wyszukać w Google hasło "Interprocess Communication" i znaleźć pół tuzina innych sposobów komunikacji między dwoma procesami. Twoje interfejsy API systemu operacyjnego zawierają kilka mechanizmów innych niż pliki i potoki. –

4

Jeśli wszystko, co robisz, wywołuje Java dla niektórych obliczeń, wtedy podproces jest najłatwiejszy, ale chciałem tylko rzucić inną opcję tam.

JPype to pakiet, który umożliwia uruchamianie maszyny JVM w programie Python podczas wywoływania kodu Java tak, jakby był to Python (example).

To znaczy, to jest jak Jython, ponieważ wywołujesz kod Java bezpośrednio i jak podproces w tym, że faktycznie używasz CPython. Rozważ JPype, jeśli z jakiegoś powodu kod Java nie jest łatwy do wywołania ze skryptu powłoki (również podprocesu) lub jeśli konieczna jest duża dwukierunkowa komunikacja.

0

Można również użyć Py4J dla tego zadania:

from py4j.java_gateway import JavaGateway 
gateway = JavaGateway()      # connect to the JVM 
gateway.jvm.java.lang.System.out.println('Hello World!') 

Najpierw należy uruchomić program Java, a następnie wywołać metodę Javy od Pythona.

py4j nie uruchamia jvm, po prostu łączy się z już uruchomionym procesem Java.

0

To może być coś, czego chcesz uniknąć. ale w najprostszy sposób, najlepszym rozwiązaniem będzie użycie gniazd/udostępnionego pliku w java. gniazdo Pythona może wysyłać informacje i poprawiać je z poziomu języka Java. Z drugiej strony, jeśli to uczucie bólu. jeśli używasz java i Pythona na tym samym komputerze, możesz użyć udostępnionego pliku, z którego java może czytać, a Python może go zmodyfikować.

Powiązane problemy