py4j 예제

다음은 Py4J 및 Eclipse로 수행할 수 있는 작업의 짧은 예입니다. SSLContext는 콜백 서버매개 변수의 인스턴스를 생성 할 때 ssl_context 매개 변수로 설정해야합니다. 테스트 파일 py4j-파이썬/src/테스트/java_tls_test.py에서 전체 예제를 볼 수 있습니다. 이러한 스레드는 교착 상태를 방지하는 데 필요합니다. 예를 들어 Java에서 콜백을 처리하는 스레드가 하나만 있는 경우 Py4J는 Java 함수와 파이썬 함수 간에 간접재귀가 발생하는 즉시 교착 상태가 됩니다. Py4J의 초기 버전은이 실수를했다 🙂 JavaGateway 및 콜백 서버를 사용하는 경우 Py4J는 명령을 받을 때마다 새 스레드를 만들고 사용할 수 있는 스레드가 없습니다. 이로 인해 파이썬과 Java 간에 재귀 호출이 있는 경우 많은 스레드가 생성될 수 있습니다. 예를 들어,이 코드를 생각해 봅시다 : 물론 첫 번째 방법을 사용하면 파이썬을 사용하는 것으로 제한됩니다. 각 언어에 대해 각각의 `브리지`와 각 언어에 대해 별도의 API가 필요합니다. 예를 들어, 가장 먼저 떠오르는 아이디어는 선택한 언어와 Java 사이의 `다리` 역할을 하는 일종의 래퍼를 사용하는 것이었습니다. 예를 들어, PY4J를 사용하여 가장 좋아하는 언어 인 파이썬과 함께 HTML5 변환기의 PDF를 사용하는 것을 살펴 보겠습니다. 다음 예제에서 Java 측은 파이썬 측에 첫 번째 호출을 하여 대화를 유도합니다.

UI 스레드에서 호출이 시작되면 파이썬에서 Java로의 모든 후속 호출이 Java UI 스레드에서 실행됩니다. 플러그인 org.py4j.py4j-java는 메이븐 또는 파이피에 게시 된 생산 항아리와 동일한 코드를 포함하고 또한 OSGi 매니페스트를 포함합니다. Mf. OSGi 번들을 로컬로 빌드하려면 빌드 지침을 참조하세요. register_input_converter()를 호출하여 사용자 지정 변환기를 추가할 수 있습니다. 예를 들어 기본 변환기의 소스 코드를 살펴봅니다. 최악의 경우 Py4J는 모든 매개 변수에 대해 등록된 모든 변환기를 거쳐야 하기 때문에 자동 변환으로 Java 메서드호출의 효율성이 약간 낮아집니다. 따라서 자동 변환은 기본적으로 비활성화됩니다. 파이썬 측에서는 신호를 사용하여 CallbackServer 이벤트를 들을 수 있습니다. 신호가 Java 개발자에게 는 외부 개념일 수 있음을 인식하는 다음은 전체 예제입니다. 다음은 JVMView를 만들고 사용하는 방법에 대한 예제입니다: Java 메서드는 Java 컬렉션의 파이썬 버전을 사용할 때 계속 액세스할 수 있습니다. 다음은 각 컬렉션 클래스에 대한 몇 가지 사용 예입니다.

이러한 예제는 전체 API를 다루지 않습니다. 다음은 Python 프로그램이 미리 구성된 스택에 액세스할 수 있도록 하는 진입점의 예입니다: 첫 번째 플러그인, net.sf.py4j는 게이트웨이 서버와 같은 모든 Py4J Java 클래스를 제공합니다. 플러그인은 소스와 자바 독과 함께 제공됩니다. 또한 플러그인은 GatewayServer가 Eclipse로 로드된 플러그인에서 선언된 모든 클래스에 액세스할 수 있도록 하는 전역 버디 정책을 선언합니다. Java 측에서는 py4j 인스턴스를 등록하여 GatewayServer 이벤트를 들을 수 있습니다. 게이트웨이서버.addListener를 가진 게이트웨이서버수신자. 다음은 Py4J로 수행할 수 있는 작업의 간략한 예입니다. 다음 파이썬 프로그램은 JVM에서 java.util.Random 인스턴스를 만들고 일부 메서드를 호출합니다. 또한 사용자 지정 Java 클래스, 추가응용 프로그램에 액세스하여 생성된 숫자를 추가합니다. 이전 예제에서는 pushAll 메서드의 매개 변수로 목록을 전달 하려고 했습니다.

JVM에서 반환되지 않은 순수 파이썬 목록을 전달하려고 하면 어떻게 되는지 확인하십시오: 이전 예제에서 볼 수 있듯이 java.util.ArrayList 가져오기는 module1_view에만 영향을 줍니다. py4j.java_collections 모듈에 있는 다음 변환기 중 하나를 사용하여 Python 컬렉션을 명시적으로 변환할 수 있습니다: SetConverter, MapConverter, ListConverter. 두 번째 플러그인인 net.sf.py4j.defaultserver는 게이트웨이 서버를 인스턴스화하고 이클립스가 시작되는 즉시 시작됩니다(지연 로드 없음).

Posted in Uncategorized