Как написать промежуточное ПО Python для серверной части Java / Scala? Как связать Java и Python?

Допустим, у меня есть серверная часть Java / Scala, и я хочу разработать для нее промежуточное ПО на Python. У меня нет опыта разработки промежуточного программного обеспечения, но я предполагаю, что это означает, что изнутри Python мне нужно будет выдавать команды для запущенных серверных программ Java / Scala и, в свою очередь, получать обратную связь от этого внутреннего интерфейса. Для этого мне нужно связать два языка, и есть несколько вариантов взаимодействия Python и Java. Согласно эти pages есть несколько вариантов:

  • JPI
  • JNI
  • JPype
  • Джепп
  • Jython
  • JCC

К сожалению, JPI, JNI, JPype и Jepp, похоже, больше не развиваются активно (последнее обновление более года назад). Jython все еще активен, но я читал, что невозможно импортировать все модули Python из Jython. JCC кажется своего рода слоем C ++ между Java и Python, что также кажется нелогичным.

Я также нашел несколько вопросов ТАК по теме, но большинству кажется, что ему больше 3-х лет, что в мире Интернета / Python, конечно, долгое время.

Поскольку у меня есть некоторый опыт работы с библиотекой обмена сообщениями ZeroMQ, я мог бы использовать ее, но мне пришлось бы настроить для нее программы Java (что не было бы такой большой проблемой, но если есть лучшее решение ...) .

Итак, мой вопрос: с учетом того, что я контролирую серверную часть Java / Scala, какой в ​​настоящее время лучший способ написать уровень промежуточного программного обеспечения Python для этого бэкэнда?


person kramer65    schedule 25.07.2013    source источник


Ответы (1)


Вы не предоставили много подробностей о том, что пытаетесь сделать. Если ваше промежуточное программное обеспечение выполняется в отдельном процессе, то, вероятно, не будет иметь большого значения, на каком языке написано ваше промежуточное программное обеспечение, если они могут взаимодействовать друг с другом - и вы можете сделать это с помощью ZMQ, как вы предложили.

Если вы на самом деле просто вызываете библиотеки Java / Scala из уровня, который хотите написать на Python, я бы выбрал Jython. «Невозможность загрузить все модули» - это проблема, только если вы планировали использовать некоторые из модулей, которые недоступны. Даже для тех модулей, которые недоступны, вы сможете найти подходящие замены Java, которые вы можете вызвать.

Наконец, если вы действительно хотите напрямую взаимодействовать между Python и Java, вы можете изучить Babel < / а>. Я знаю некоторых людей, которые успешно использовали его для сопряжения программ на C, Java и Python, и мне показалось, что он неплохо сработал для них.

person DaoWen    schedule 25.07.2013
comment
Хммм, может ты и прав. На самом деле я не знаю, понадобятся ли нам какие-либо C-расширения на уровне Python, и если да, мы действительно можем найти альтернативу в модуле Java. Я постараюсь прочитать на Jython сегодня. Спасибо за Ваш ответ! - person kramer65; 25.07.2013