py4j 예제

JavaGateway 및 콜백 서버를 사용하는 경우 Py4J는 명령을 받을 때마다 새 스레드를 만들고 사용할 수 있는 스레드가 없습니다. 이로 인해 파이썬과 Java 간에 재귀 호출이 있는 경우 많은 스레드가 생성될 수 있습니다. 예를 들어, 이 코드를 생각해 봅시다: Java 컬렉션의 파이썬 버전을 사용할 때 Java 메서드는 여전히 액세스할 수 있습니다. 다음은 각 컬렉션 클래스에 대한 몇 가지 사용 예입니다. 이러한 예제는 전체 API를 다루지 않습니다. 파이썬 측에서는 신호를 사용하여 CallbackServer 이벤트를 들을 수 있습니다. 자바 개발자에게 신호가 외국 개념일 수 있음을 인식하는 것은 여기에 전체 예입니다 : 두 번째 플러그인, net.sf.py4j.defaultserver는 게이트웨이 서버를 인스턴스화하고 이클립스가 시작되자마자 시작됩니다 (지연 로드 없음). 기본 서버에서 사용하는 포트는 Py4J 기본 설정 페이지에서 변경할 수 있습니다. 서버는 런타임시에도 액세스할 수 있습니다: 이전 예제에서는 pushAll 메서드의 매개 변수로 목록을 전달하려고 했습니다. 당신이 JVM에 의해 반환되지 않은 순수한 파이썬 목록을 전달하려고하면 어떻게되는지 참조하십시오 : 여기에 당신이 Py4J와 이클립스로 무엇을 할 수있는 짧은 예입니다 : 버전 0.3 이후, Py4J는 JVM이 파이썬 객체를 다시 호출 할 수 있도록 파이썬 클래스가 자바 인터페이스를 구현 할 수 있습니다 s. 다음 예제에서 Python 클래스는 Java 리스너 인터페이스를 구현합니다. py4j.java_collections 모듈에 있는 다음 변환기 중 하나를 사용하여 Python 컬렉션을 명시적으로 변환할 수 있습니다: SetConverter, MapConverter, ListConverter.

import 문을 사용하는 권장 방법은 파이썬 모듈 당 하나의 JVMView 인스턴스를 사용하는 것입니다. 다음은 JVMView를 만들고 사용하는 방법에 대한 예입니다: 다음은 파이썬 프로그램이 미리 구성된 스택에 액세스할 수 있도록 하는 진입점의 예입니다: 플러그인 org.py4j.py4j-java는 메이븐 또는 파이에 게시된 생산 항아리와 동일한 코드를 포함합니다. 파이와 그것은 또한 OSGi 매니페스트가 포함되어 있습니다. Mf. OSGi 번들을 로컬로 빌드하려면 빌드 지침을 참조하세요. 실행 가능한 예제는 py4j.example.ExampleSSLApplication에 있습니다. 첫 번째 플러그인 net.sf.py4j는 게이트웨이 서버와 같은 모든 Py4J Java 클래스를 제공합니다. 플러그인은 소스와 자바 독과 함께 제공됩니다. 또한 플러그인은 GatewayServer가 Eclipse로 로드된 플러그인에서 선언된 모든 클래스에 액세스할 수 있도록 하는 전역 버디 정책을 선언합니다.

물론 첫 번째 방법을 사용하면 파이썬을 사용하는 것으로 제한됩니다. 각 언어에 대해 각각의 `브리지`와 각 언어에 대해 별도의 API가 필요합니다. 예를 들어 이러한 제한 사항을 해결하기 위해 py4j.clientserver 모듈은 다른 쪽에서 받은 콜백이 처음부터 스레드에서 실행되도록 하는 고정된 스레드 모델이라고도 하는 단일 스레딩 모델을 구현합니다. 예를 들어 이전 코드를 이 코드로 수정하면 전체적으로 Java 측에서 하나의 스레드만 만들어집니다. 어떤 이유로 든 여러 스레드가 파이썬 측에서 만들어지고 각각 Java 측을 호출하면 해당 Java 스레드가 만들어집니다.

Share on FacebookPin on PinterestTweet about this on TwitterShare on TumblrShare on Google+Digg this