shineware / PyKOMORAN

(Beta) PyKOMORAN is wrapped KOMORAN in Python using Py4J.
https://pydocs.komoran.kr
Apache License 2.0
42 stars 5 forks source link

PyKOMORAN의 core가 실행되지 않는 문제 #48

Open shin285 opened 5 years ago

shin285 commented 5 years ago

문제 설명

PyKomoran에 있는 core.py의 main이 실행되지 않습니다.

재현 경로

core.py를 run 시키면 발생

기대 상황

komoran의 분석 결과들이 출력됩니다.

환경 정보

어떤 환경에서 이 문제가 발생하였나요?

추가 정보

Traceback (most recent call last):
  File "D:/python/PyKOMORAN/python/PyKomoran/core.py", line 293, in <module>
    komoran = Komoran("EXP")
  File "D:/python/PyKOMORAN/python/PyKomoran/core.py", line 56, in __init__
    raise KomoranError("Komoran is NOT initialized!")
__main__.KomoranError: Komoran is NOT initialized!
9bow commented 5 years ago

core.py 내의 main은 개발 중 만들어두었던 코드로 삭제해야 합니다. (이와 별개로) 위 문제는 Java-side에서의 KOMORAN 객체가 초기화되지 않아서 발생하는 문제인데요, 위와 같은 에러가 발생할 때 Py4J JVM이 실행 중인가요? 또는 어떤 경로에서 어떻게 실행하셨는지 알려주시면 원인을 찾는데 도움이 될 것 같습니다.

shin285 commented 5 years ago

core.py만 실행시켰습니다. Py4J JVM을 따로 실행시키지 않았습니다.

9bow commented 5 years ago

네, 해당 에러는 (위에서 언급한 것처럼) Java-side의 KOMORAN 객체가 초기화되지 않아서 발생하는 것인데요, core.py는 별도로 JVM을 실행시키지 않아도 자동으로 jvm.py를 불러 JVM을 실행하도록 되어 있기 때문에 Py4J JVM이 실행 중인지를 문의드렸던 것입니다. 위와 같은 에러가 발생할 때 Py4J JVM이 실행 중인가요? 또는 어떤 경로에서 어떻게 실행하셨는지를 다시 한 번 확인해주실 수 있으실까요?

shin285 commented 5 years ago

PyCharam에서 "python/PyKomoran/core.py"의 main을 실행시켰습니다. 콘솔에서 실행시켜도 같은 에러가 발생합니다. Py4J에 대해서 따로 실행시키지 않았습니다. 확인부탁드립니다.

zidane100e commented 5 years ago

혹시 komoran 이 multiprocess 에서는 어떻게 작동해야 하는지 알 수 있을까요?

저는 multiprocess 에서 위와 동일한 에러가 발생합니다 komoran 을 어디에서 생성하느냐에 따라 py4j.protocol.Py4JError: kr.co.shineware.nlp.pykomoran.KomoranEntryPoint.co does not exist in the JVM 가 생기기도 하고, 위와 같은 에러가 생기기도 합니다.

process 를 하나로 하면 정상 작동합니다. process 대신 thread 를 이용해서 komoran instance 를 만들고 thread로 넘겨주면 위의 에러 없이 작동되네요

9bow commented 5 years ago

안녕하세요, @zidane100e 님 결론부터 말씀드리면 Multi Process / Thread 지원을 고민하다가 대대적인 구조 개선이 필요함을 인식하고 고민 중(?)인 상태입니다.

위에 알려주신 Py4J 에러는 JVM이 초기화가 되지 않아서 발생하는 문제로 보입니다. 다만, 위 에러를 피하기 위해 JVM 초기화를 하는 경우 여러 개의 PyKomoran Process는 곧 여러 개의 JVM Instance를 생성하게 되어 비효율적입니다. 하나의 JVM 내에서 Multi Thread로 동작하는 식으로 코드를 개선해야 하는데, 현재 Komoran - KomoranEntryPoint(Wrapper)에서는 이와 같은 구조가 담겨있지 않은 상태입니다.

번거로우시겠지만 우선은 Java 기반의 KOMORAN을 사용하고 계셔 주시면 빠른 시간 내에 해결책을 찾아보도록 하겠습니다. ( )

zidane100e commented 5 years ago

자세히 설명해 주셔서 감사드립니다.