반응형

파이썬 FastAPI + JAVA (Jpype) 예제

글. 수알치 오상문

 

예제가 동작하려면 JVM 환경이 설치되어 있어야 합니다.

 

[ jpype_util ]

import jpype
import atexit
import time

jvm_started = False

def start_jvm():
    global jvm_started, jvm
    if not jvm_started:
        print("JVM start...")
        jpype.startJVM(jpype.getDefaultJVMPath())
        jvm_started = True

def close_jvm():
    global jvm_started
    if jvm_started:
        print("JVM quit...")
        jpype.shutdownJVM()
        jvm_started = False

atexit.register(close_jvm)  # program exit

 

 

[ main.py ] 

from fastapi import FastAPI
from jvm_util import start_jvm, jvm_started
import jpype

app = FastAPI()

@app.on_event("startup")  # FastAPI start event
async def startup_event():
    start_jvm()  # JVM init

@app.on_event("shutdown")  # FastAPI end event
async def close_jvm():
    jvm.shutdownJVM() 

@app.get("/")
async def read_root():
    if jpype.isJVMStarted():
        java_util = jpype.JPackage('java').util
        array_list = java_util.ArrayList()
        array_list.add("Hello")
        array_list.add("world!")
        if isinstance(array_list, java_util.ArrayList):
            print("array_list is a JAVA Array")
        return {"ArrayList": str(array_list)}
    else:
        return {"Error": "None JVM"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=80)

 

 

[ FastAPI 실행 ] 

python main.py 

 

 

[ 웹 접속 ] http://127.0.0.1/docs

루트 라우트 선택하고 실행하면 아래첨 응답이 온 것을 확인할 수 있다.

 

반응형

+ Recent posts