[bug] Fix crash when using custom java object in python async thread (#95) [bug] Fix crash when using custom java object in python async thread minor improvement (cherry picked from commit eb75b898200317f7ece07e0a71b76ebe5e492913) (cherry picked from commit 4cde09269590ca6b230cabdc3b9600f234afa4e7)
[bug] Fix crash when using custom java object in python async thread (#95)
[bug] Fix crash when using custom java object in python async thread
minor improvement
(cherry picked from commit eb75b898200317f7ece07e0a71b76ebe5e492913) (cherry picked from commit 4cde09269590ca6b230cabdc3b9600f234afa4e7)
PemJa is an open source cross language call framework based on FFI. It aims to provide a high-performance
framework of calling between different languages.
Python binary installers for the latest released version are available at the Python package index
pip install pemja
Java Maven Dependency
<dependency> <groupId>com.alibaba</groupId> <artifactId>pemja</artifactId> <version>{version}</version> </dependency>
Prerequisites for building PemJa:
NOTE for windows:
pip install dist/$packageName$
git clone https://github.com/alibaba/pemja.git cd pemja mvn clean install -DskipTests pip install -r dev/dev-requirements.txt python setup.py sdist pip install dist/*.tar.gz
String path = ...; PythonInterpreterConfig config = PythonInterpreterConfig .newBuilder() .setPythonExec("python3") // specify python exec, use "python" on Windows .addPythonPaths(path) // add path to search path .build(); PythonInterpreter interpreter = new PythonInterpreter(config); // set & get interpreter.set("a", 12345); interpreter.get("a"); // Object interpreter.get("a", Integer.class); // Integer // exec & eval interpreter.exec("print(a)"); // invoke functions interpreter.exec("import str_upper"); String result = interpreter.invoke("str_upper.upper", "abcd"); // Object invoke(String name, Object... args); // Object invoke(String name, Object[] args, Map<String, Object> kwargs); // invoke object methods /* // invoke.py class A: def __init__(self): self._a = 0 def get_value(self): return self._a def add(self, n): self._a += n def add_all(self, *args): for item in args: self._a += item return self._a def minus(self, n): self._a -= n return self._a */ interpreter.exec("import invoke"); interpreter.exec("a = invoke.A()"); interpreter.invokeMethod("a", "add", 3); interpreter.invokeMethod("a", "minus", 2); interpreter.invokeMethod("a", "add_all", 1, 2, 3); // python callback java methods /* // invoke_callback.py from pemja import findClass StringBuilder = findClass('java.lang.StringBuilder') Integer = findClass('java.lang.Integer') def callback_java(): sb = StringBuilder() sb.append('pemja') sb.append('java') sb.append('python') sb.append(Integer.toHexString(Integer.MAX_VALUE)) return sb.toString() */ interpreter.exec("import call_back") print(interpreter.invoke("call_back.callback_java"))
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
PemJa
What is it?
PemJa is an open source cross language call framework based on FFI. It aims to provide a high-performance
framework of calling between different languages.
Where to get it
Python binary installers for the latest released version are available at the Python package index
Java Maven Dependency
Installation from sources
Prerequisites for building PemJa:
NOTE for windows:
pip install dist/$packageName$Usage
Documentation
How To Contribute