Java интеграция Python

В зависимости от вашей конкретной цели существует способ достижения полезности родительского селектора без использования одного (даже если бы он существовал) ...

Скажем, у нас есть:

<div>
  <ul>
    <li><a>Pants</a></li>
    <li><a>Socks</a></li>
    <ul>
      <li><a>White socks</a></li>
      <li><a>Blue socks</a></li>
    </ul>
  </ul>
</div>

Что мы можем сделать, чтобы блок Socks (включая цвета носка) выделялся визуально с использованием интервала?

Что было бы неплохо, но не существует:

ul li ul:parent {
  margin-top: 15px;
  margin-bottom: 15px;
}

Что существует:

li > a {
  margin-top: 15px;
  display: block;
}
li > a:only-child {
  margin-top: 0px;
}

Это устанавливает, что все привязные ссылки имеют верхний край 15px и сбрасывают его обратно на 0 для тех, у которых нет элементов UL (или других тегов) внутри LI.

50
задан geowa4 13 July 2009 в 03:28
поделиться

8 ответов

Почему бы не использовать Jython ? Единственный недостаток, о котором я могу сразу подумать, это то, что ваша библиотека использует собственные расширения CPython.

РЕДАКТИРОВАТЬ: Если вы можете использовать Jython сейчас , но думаете, что у вас могут быть проблемы с более поздней версией библиотеки, я предлагаю вы пытаетесь изолировать библиотеку от своего приложения (например, какой-то интерфейс адаптера). Выбирайте самую простую вещь, которая работает на данный момент, а затем рассмотрите JNI / CPython / и т.д., если и когда вам когда-нибудь понадобится. Мало что можно получить от (болезненного) пути JNI, если только в этом нет необходимости.

38
ответ дан 7 November 2019 в 10:54
поделиться

Лучшие решения, должен использовать бросок программ Python REST API. Вы определяете свои сервисы и называете их. Возможно, необходимо изучить некоторые новые модули. Но Вы будете более гибкими для изменений фьючерсов.

Здесь маленький список использования полные модули с этой целью: модули Python

  • Фляга
  • Фляга-SQLAlchemy
  • Успокоительный Флягой
  • модули SQlite3
  • Jsonify

Java (для вызова API отдыха) Джерси или Apache CXF

, Вам будет нужна небольшая Кривая обучения, но позже Вы получите больше производительности и модульного принципа и даже эластичности...

0
ответ дан 7 November 2019 в 10:54
поделиться

Frankly most ways to somehow run Python directly from within JVM don't work. They are either not-quite-compatible (new release of your third party library can use python 2.6 features and will not work with Jython 2.5) or hacky (it will break with cryptic JVM stacktrace not really leading to solution).

My preferred way to integrate the two would use RPC. XML RPC is not a bad choice here, if you have moderate amounts of data. It is pretty well supported — Python has it in its standard library. Java libraries are also easy to find. Now depending on your setup either Java or Python part would be a server accepting connection from other language.

A less popular but worth considering alternative way to do RPCs is Google protobuffers, which have 2/3 of support for nice rpc. You just need to provide your transport layer. Not that much work and the convenience of writing is reasonable.

Another option is to write a C wrapper around that pieces of Python functionality that you need to expose to Java and use it via JVM native plugins. You can ease the pain by going with SWIG SWIG.

Essentially in your case it works like that:

  1. Create a SWIG interface for all method calls from Java to C++.
  2. Create C/C++ code that will receive your calls and internally call python interpreter with right params.
  3. Convert response you get from python and send it via swig back to your Java code.

This solution is fairly complex, a bit of an overkill in most cases. Still it is worth doing if you (for some reason) cannot afford RPCs. RPC still would be my preferred choice, though.

19
ответ дан 7 November 2019 в 10:54
поделиться

Я исследовал аналогичную установку с JNI. Может быть, это поможет, если еще не видел:

http://wiki.cacr.caltech.edu/danse/index.php/Communication_between_Java_and_Python

http://jpe.sourceforge.net/

4
ответ дан 7 November 2019 в 10:54
поделиться

Другая моя мысль - использовать JNI для связи с привязками C для Python.

Мне очень нравится JNA :

JNA обеспечивает легкий доступ к программам Java в собственные общие библиотеки (библиотеки DLL в Windows) без написания чего-либо, кроме кода Java - JNI или собственный код не требуется. Эта функциональность сравнима с типами Windows Platform / Invoke и Python. Доступ динамический во время выполнения без генерации кода.

Мои 0,02 доллара:)

7
ответ дан 7 November 2019 в 10:54
поделиться

Если вы можете заставить свой код Python работать в Jython, вы сможете использовать его для вызова из Java:

3
ответ дан 7 November 2019 в 10:54
поделиться

You could use a messaging service like ActiveMQ. It has both Python and Java support. This way, you can leave the complicated JNI or C bindings as they are and deal solely with what I consider a simple interface. Moreover, when the library gets updated, you don't need to change much, if anything.

5
ответ дан 7 November 2019 в 10:54
поделиться

Рассматривали ли вы возможность запуска Jython на виртуальной машине Java?

4
ответ дан 7 November 2019 в 10:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: