PyKOMORAN icon indicating copy to clipboard operation
PyKOMORAN copied to clipboard

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

Open shin285 opened this issue 6 years ago • 7 comments

문제 설명

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

재현 경로

core.py를 run 시키면 발생

기대 상황

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

환경 정보

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

  • OS 종류 / 버전:윈도우10
  • PyKomoran 버전: commit 9d3645177f48b4d91554fe2285f52586e06e0d45
  • Python 버전:3.6

추가 정보

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!

shin285 avatar May 09 '19 14:05 shin285

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

9bow avatar May 09 '19 20:05 9bow

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

shin285 avatar May 12 '19 15:05 shin285

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

9bow avatar May 13 '19 00:05 9bow

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

shin285 avatar May 16 '19 14:05 shin285

혹시 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로 넘겨주면 위의 에러 없이 작동되네요

zidane100e avatar Jun 21 '19 07:06 zidane100e

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

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

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

9bow avatar Jun 23 '19 22:06 9bow

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

zidane100e avatar Jun 24 '19 12:06 zidane100e