최근에 py4j를 발견했으며 파이썬에서 정적 자바 메소드를 호출 할 수있었습니다. 이제 java에서 파이썬 메소드를 호출하려고합니다. 나는 많은 문서를 찾을 수 없기 때문에 그것이 가능한지, 그리고 어떻게 가능할지를 생각할 수있는 마지막 장소라고 생각한다.py4j - 어떻게 자바에서 파이썬 메소드를 호출할까요?
답변
자바에서 파이썬 메서드를 호출 할 수 있습니다. implementing a Java interface on the python side.
단계는 다음과 같습니다
- 는 예를 들어, 파이썬에서 py4j.examples.Operator
- 는, 클래스를 생성하고 클래스 내부에 "구현"과 자바 클래스를 만들고, 자바 인터페이스를 만들기 들.
- 파이썬에서 start_callback_server = True를 사용하여 게이트웨이를 인스턴스화하십시오. 예 :
gateway = JavaGateway(start_callback_server=True)
- 파이썬에서는 Java 인터페이스를 구현하는 클래스를 인스턴스화하여 Java 측으로 보냅니다.
- 자바에서는 인터페이스를 호출하십시오. Py4J 문서에서 적응
예 :
자바 코드 :
// File 1
package py4j.examples;
public interface Operator {
public int doOperation(int i, int j);
public int doOperation(int i, int j, int k);
}
// File 2
package py4j.examples;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import py4j.GatewayServer;
public class OperatorExample {
// To prevent integer overflow
private final static int MAX = 1000;
public List<Integer> randomBinaryOperator(Operator op) {
Random random = new Random();
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(random.nextInt(MAX));
numbers.add(random.nextInt(MAX));
numbers.add(op.doOperation(numbers.get(0), numbers.get(1)));
return numbers;
}
}
파이썬 코드 :
from py4j.java_gateway import JavaGateway
class Addition(object):
def doOperation(self, i, j, k = None):
if k == None:
return i + j
else:
return i + j + k
class Java:
implements = ['py4j.examples.Operator']
if __name__ == '__main__':
gateway = JavaGateway(start_callback_server=True)
operator = Addition()
operator_example = gateway.jvm.py4j.examples.OperatorExample()
# "Sends" python object to the Java side.
numbers = operator_example.randomBinaryOperator(operator)
좋은 예입니다. py4j 0.8.2.1 – user3451476
으로 이것이 어떻게 달성 될 수 있는지 말할 수 있습니다. 0.8.2.1에서와 같이 작동해야합니다. – Barthelemy
파이썬 스크립트를 수정할 필요없이'.py' 파일을 주어진 파이썬 함수를 호출 할 수 있습니다. Jython PythonInterpreter를 사용하면 파이썬 파일에 정의 된 함수를 호출 할 수 있습니다. (http://www.jython.org/jythonbook/en/1.0/JythonAndJavaIntegration.html#utilizing-pythoninterpreter). py4j와 비슷한 것이 가능합니까? – Mahesha999
가능한 중복 : http://stackoverflow.com/questions/14450173/send-a-python-object-to-java-using-py4j? rq = 1 – Barthelemy