비동기 in Thread

차원석·2022년 4월 4일
0

python

목록 보기
2/2

회사 프로젝트를 진행 중에 말뭉치들을 회사 내부에서 구현한 형태소 분석기로 분석해서 메모리에 올려야하는 일이 생겼다 대상 문장들은 14000개정도 되는 FAQ 질의 문장이었다

형태소분석기는 자바로 빌드되었고 jpype로 실행하도록 셋팅이 되었다

형태소 분석 함수에는 성능 향상을 위해서인지 비동기로 코드작성이 되어있는 상황이었다

14000개의 문장을 형태소 분석하는 시간은 2분 30초 정도였고

Django 서비스가 실행 될때 여러가지 리소스들이 동시에 로드가 되고 있는 상황이라
2분 30초의 시간을 줄일 필요가 있었다

그래서 Thread 안에서 비동기 처리를 하는 구조로 코드를 작성했고 40여초로 시간을 줄일 수 있었다

구현와중에 쓰레드 속에서 비동기로 작성된 함수가 잘 작동하는지 테스트를 하던중에

주피터 환경 개발과 py파일의 개발 환경에서 각각 비동기 함수의 작동방식이 달라서
조금 귀찮았었다

*참고
비동기 관련 update는 비동기 부분을 열고 닫고하는 로직에서
.run 함수로직으로 Python 3.7에서 추가되었다
비동기와 쓰레드를 더 깊이 공부하면 장편의 글이 하나 나오겠지만
일단은 여기까지 정리하겠다
쓰다보니 일기네...

코드 골조만 공유

from concurrent.futures import ThreadPoolExecutor

def get_mazer_keywords(self, text):
        try:
            result = asyncio.run(mazer.get_xml(text))
            
with ThreadPoolExecutor(max_workers=threadCount) as executor:
    executor.map(self.get_mazer_keywords,sentences)
profile
다들 사실 개발을 좋아해

0개의 댓글