You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
celery task 함수 내에서 Kkma()등 자바기반 konlpy tag를 처음 init하는 경우 셀러리의 스레드 안에서 jvm_init()이 실행되어 정상적으로 jvm과 통신할 수 없게되는 문제가 있습니다.
다음의 celery task는 실패하고 영원히 끝나지 않습니다.
@celery.taskdefrecord_nouns(score, sentence):
t=Kkma()
nouns=t.nouns(sentence)
# TODO: save nouns to dbreturnnouns
다음과 같이 module 스코프에서 인스턴스를 생성하는 방법으로 스레드내에서 jvm_init()이 되지 않도록 회피할 수 있습니다. 하지만 task를 call 하는 쪽 머신에도 konlpy를 설치해야 하거나 모듈을 import하는것만으로 불필요하게 무거운 jvm이 함께 실행되어야 하는 불편함이 있습니다.
t=Kkma()
@celery.taskdefrecord_nouns(score, sentence):
nouns=t.nouns(sentence)
# TODO: save nouns to dbreturnnouns
celery task 함수 내에서 Kkma()등 자바기반 konlpy tag를 처음 init하는 경우 셀러리의 스레드 안에서 jvm_init()이 실행되어 정상적으로 jvm과 통신할 수 없게되는 문제가 있습니다.
다음의 celery task는 실패하고 영원히 끝나지 않습니다.
다음과 같이 module 스코프에서 인스턴스를 생성하는 방법으로 스레드내에서 jvm_init()이 되지 않도록 회피할 수 있습니다. 하지만 task를 call 하는 쪽 머신에도 konlpy를 설치해야 하거나 모듈을 import하는것만으로 불필요하게 무거운 jvm이 함께 실행되어야 하는 불편함이 있습니다.
또는
스레드를 사용하는 많은 경우에 이같은 문제를 만날 가능성이 있으므로 스레드 밖에서 jvm을 시작할 수 있는 방법이 마련되면 좋을 것 같습니다.
감사합니다.
The text was updated successfully, but these errors were encountered: