실행 모드
실행 모드
Python API는 사용 사례의 요구사항과 작업의 특성에 따라 선택할 수 있는 서로 다른 런타임 실행 모드를 지원합니다. Python 런타임 실행 모드는 Python 사용자 정의 함수가 어떻게 실행될지 정의합니다.
release-1.15 이전에는 PROCESS 실행 모드라는 유일한 실행 모드가 있었습니다. PROCESS 모드는 Python 사용자 정의 함수가 별도의 Python 프로세스에서 실행됨을 의미합니다.
release-1.15에서 THREAD 실행 모드라는 새로운 실행 모드가 도입되었습니다. THREAD 모드는 Python 사용자 정의 함수가 JVM에서 실행됨을 의미합니다.
참고: 같은 JVM에서 실행되는 여러 Python 사용자 정의 함수는 여전히 GIL의 영향을 받습니다.
출처: 문서
본문
THREAD 실행 모드는 언제 사용할 수/해야 하나요?
THREAD 모드 도입의 목적은 PROCESS 모드에서 프로세스 간 통신이 도입하는 직렬화/역직렬화 및 네트워크 통신 오버헤드를 극복하는 것입니다. 따라서 성능이 걱정되지 않거나 Python 사용자 정의 함수의 계산 로직이 작업의 성능 병목이라면, PROCESS 모드가 THREAD 모드보다 최상의 격리를 제공하므로 PROCESS 모드가 최선의 선택입니다.
Python 실행 모드 구성
실행 모드는 python.execution-mode 설정으로 구성할 수 있습니다. 두 가지 가능한 값이 있습니다.
PROCESS: Python 사용자 정의 함수가 별도의 Python 프로세스에서 실행됩니다. (기본값)THREAD: Python 사용자 정의 함수가 JVM에서 실행됩니다.
Python Table API 또는 Python DataStream API 작업에서 실행 모드를 다음과 같이 지정할 수 있습니다.
## Python Table API
# Specify `PROCESS` mode
table_env.get_config().set("python.execution-mode", "process")
# Specify `THREAD` mode
table_env.get_config().set("python.execution-mode", "thread")
## Python DataStream API
config = Configuration()
# Specify `PROCESS` mode
config.set_string("python.execution-mode", "process")
# Specify `THREAD` mode
config.set_string("python.execution-mode", "thread")
# Create the corresponding StreamExecutionEnvironment
env = StreamExecutionEnvironment.get_execution_environment(config)
지원되는 경우
Python Table API
다음 표는 Python Table API에서 THREAD 실행 모드가 지원되는 곳을 보여줍니다.
| UDFs | PROCESS |
THREAD |
|---|---|---|
| Python UDF | Yes | Yes |
| Python UDTF | Yes | Yes |
| Python UDAF | Yes | No |
| Pandas UDF & Pandas UDAF | Yes | No |
Python DataStream API
다음 표는 Python DataStream API에서 PROCESS 실행 모드와 THREAD 실행 모드가 지원되는 곳을 보여줍니다.
| Operators | PROCESS |
THREAD |
|---|---|---|
| Map | Yes | Yes |
| FlatMap | Yes | Yes |
| Filter | Yes | Yes |
| Reduce | Yes | Yes |
| Union | Yes | Yes |
| Connect | Yes | Yes |
| CoMap | Yes | Yes |
| CoFlatMap | Yes | Yes |
| Process Function | Yes | Yes |
| Window Apply | Yes | Yes |
| Window Aggregate | Yes | Yes |
| Window Reduce | Yes | Yes |
| Window Process | Yes | Yes |
| Side Output | Yes | Yes |
| State | Yes | Yes |
| Iterate | No | No |
| Window CoGroup | No | No |
| Window Join | No | No |
| Interval Join | No | No |
| Async I/O | No | No |
참고
현재 모든 곳에서 THREAD 실행 모드로 Python UDF를 실행하는 것을 지원하지는 않습니다. 이러한 경우 PROCESS 실행 모드로 폴백합니다. 따라서 작업을 THREAD 실행 모드로 실행하도록 구성했지만 실제로는 PROCESS 실행 모드로 실행될 수 있습니다.
실행 동작
이 섹션은 THREAD 실행 모드의 실행 동작 개요를 제공하고 이를 PROCESS 실행 모드와 대조합니다. 자세한 내용은 이 기능을 도입한 FLIP을 참조하세요: FLIP-206.
PROCESS 실행 모드
PROCESS 실행 모드에서 Python 사용자 정의 함수는 별도의 Python Worker 프로세스에서 실행됩니다. Java 연산자 프로세스는 다양한 Grpc 서비스를 사용해 Python worker 프로세스와 통신합니다.
THREAD 실행 모드
THREAD 실행 모드에서 Python 사용자 정의 함수는 Java 연산자와 같은 프로세스에서 실행됩니다. PyFlink는 서드파티 라이브러리 PEMJA를 사용해 Java 애플리케이션에 Python을 내장합니다.