!pip install aiohttp
비동기화를 설명하기 이전에 지난번 작성했던 번역 부분을 보겠다.
a = start_trans("naver")
a
번역해서 돌아오는 시간을 계산해본 결과 1~2초 정도 걸렸다
하지만 10개의 데이터를 보내면 대략 10~20초 사이 시간이 소모되는 것을 확인 할 수 있다.
만약 100개의 데이터를 보내고 최소 100초가 걸린다면, 우리는 사용하지 않을것이다.
우리가 해야할 것은 영어의 파일 이름일 경우 단체로 보내어 번역을 시켜줘야 하는데 이렇게 오래걸린다면 사용할 이유가 전혀 없다.
그렇다면 배열로 보내어 한번에 번역을 시키면 어떨까?
한글 데이터를 영어로 바꿔보겠다
파파고 번역기를 사용해본 결과 번역이 제데로 되지 않았다.
확장자 명과 싱글 쿼터를 제외하고도 제데로 번역이 되지 않는 것을 확인할 수 있었다.
파파고 API 역시 AI 알고리즘을 사용하는데 이러한 값을 제데로 인식하지 못하는데 오류가 난다고 생각한다.
파파고API의 비동기화를 적용해보기 전에 기본적인 용어를 정리한다.
파이썬에서 비동기 프로그래밍을 하기 위해서는 이벤트 루프와 코루틴 사용한다.
1. 이벤트 루프(Event Loop)
이벤트 루프는 작업들을 루프(반복문)를 돌면서 하나씩 실행시키는 역할을 합니다. 이때, 만약 실행된 작업이 특정한 데이터를 요청하고 응답을 기다려야 한다면, 이 작업은 다시 이벤트 루프에 통제권을 넘겨줍니다. 통제권을 받은 이벤트 루프는 다음 작업을 실행하게 됩니다. 그리고 응답을 받은 순서대로 멈췄던 부분부터 다시 통제권을 가지고 작업을 마무리합니다.
2. 코루틴(Coroutine)
이때, 이러한 작업은 파이썬에서 코루틴(Coroutine)으로 이루어져 있습니다. 코루틴은 응답이 지연되는 부분에서 이벤트 루프에 통제권을 줄 수 있으며, 응답이 완료되었을 때 멈추었던 부분부터 기존의 상태를 유지한 채 남은 작업을 완료할 수 있는 함수를 의미합니다. 파이썬에서 코루틴이 아닌 일반적인 함수는 서브루틴(Subroutine)이라고 합니다.
본격적으로 비동기화 작업을 시작하겠다.
!pip install aiohttp
nest_asyncio.apply() # 자체적으로 루프를 사용할 경우 루프 중첩이 안됨을 방지
async def fetch_ko(data):
client_id = "" # client_id 기입
client_secret = "" # client_secret 기입
data = {'text': data,
'source': 'ko',
'target': 'en'}
headers = {"X-NCP-APIGW-API-KEY-ID": client_id,
"X-NCP-APIGW-API-KEY": client_secret}
url = "https://naveropenapi.apigw.ntruss.com/nmt/v1/translation"
async with aiohttp.ClientSession() as session:
async with session.post(url, data=data, headers=headers) as res:
if res.status == 200:
b = await res.json()
c = (b['message']['result']['translatedText'])
return c
else:
print("Error Code:", res.status)
return await res.text()
async def main(data_list):
futures_ko = [fetch_ko(data_list[v]) for v in range(len(data_list))] # 번역할 데이터만큼 작업
result_ko = await asyncio.gather(*futures_ko) #비동기로 두 개 이상의 작업(코루틴)을 돌릴 때에는 asyncio.gather함수를 이용. 이때, 각 태스크들은 unpacked(*) 형태로 넣어주어주어야함
return result_ko
futures_ko 부분에 파파고 API 사용할 데이터만큼 비동기로 실행하여 작업하는 과정
result_ko 부분에 await asyncio.gather는 두 개 이상 작업을 비동기로 하기위한 일련의 병렬화하여 시작한다는 의미이다.
gather에 * 을 사용하는 이유는 각 태스크들이 언팩 형태로 넣어줘야 된다는 점만 유의
def start_trans(data_list):
start = time.perf_counter() # 시간 재는 함수 시작
loop = asyncio.get_event_loop()
result = loop.run_until_complete(main(data_list)) #<-input : data_list
end = time.perf_counter() # 시간 재는 함수 끝
print ('소요시간 : {} 초'.format(end-start))
return result
loop = asyncio.get_event_loop() : 현재의 이벤트 루프를 가져온다.
현재 OS 스레드에 현재 이벤트 루프가 설정되어 있지 않고, OS 스레드가 메인이고, set_event_loop()가 아직 호출되지 않았으면, asyncio는 새 이벤트 루프를 만들어 현재 이벤트 루프로 설정 ( asyncio.get_running_loop() 사용을 권장 )
result = loop.run_until_complete(main(data_list)) : 루프의 시작 및 중지로 작업이 완료될때까지 실행
결과값
['Kospi foreigners are buying individuals, breaking the Kosdaq.txt', "The Democratic Party of Korea's Future Legislation and Standing Committee Meeting .txt", 'Self-supporting iPhone loss insurance subscription date is available.txt', "Instead of MOMOLAND's owner isolation boom, the special eel is shaking so much.txt", 'Netmarble World Season Channel Update.txt', 'Kospi is the highest in history for three consecutive days.txt', 'MDP Future Legislation and Standing Committee Meeting.txt', 'Telecom Map Android Autobeta Test Launch.txt', 'What do you do when you play? Top cutie, Jae Seok, the Jukebox Open with 10,000 people and Surprise Live.txt', 'Ballad group Soonhee will not give all new songs.txt', 'Trot god Hongwon Vintes type highly praised the elimination of the revival of the losing team.txt', 'Netmarble World Add a New Chaptor Card.txt', 'KOSPI rises, exchange rate drops.txt', 'Self-supporting iPhone also makes loss insurance available.txt', 'Jang Dong Min Bae, who is suffering from social damage that goes over the issue talk.txt', "KOSPI's highest-ever.txt", 'Returning electric kickboard law enforcement bill passed.txt', 'The Big Hit Rables are spread under the theme. txt', 'Self-supporting iPhone to purchase loss insurance.txt', "KOSPI's highest ever.txt", 'Telecom self-supporting iPhone is also covered by loss insurance.txt', 'Softwave digital conversion cybersecurity is key.txt', "Lee Nak-yeon's Airborne Treatment Act must have been patient and determined to be close.txt", 'Sales Force Advanced Car Branded Bentley Solution Supply.txt', 'Kospi again the highest closing ever.txt', 'MOMOLAND JooE Boom Power vs. Fresh Beauty.txt', "KOSPI's highest closing price.txt", 'Lee Nak-yeon Kim Tae-nyeon attending the joint meeting of the Future Legislation and the Standing Committee.txt', "Acting Presidential Procedural Justice Party's Appeals for Justice and Punishment Committee.txt", 'Red Velvet Irene, a recent photo shoot star.txt', 'KOSPI closing audit record highs for days in a row.txt', "KOSPI's highest-ever dollar exchange rate.txt", 'SoftWavePlen Optic Content Creation Technology.txt', 'The Trot god is here. Hong Won Vintes, the legendary.txt.txt', 'Representative Lee Nak-yeon who proposes future legislation.txt', "KOSPI's consecutive highest-ever alert line closing comprehensive.t", 'KOSPI closing in front of the highest alert line.txt', 'KOSPI is on a steady rise for the third day.txt', 'Building an apartment in the National Assembly of the Democratic Party of Korea is construction populism.txt', "I'll hurry up and finish the photo ha ha ha.txt", 'Display market transaction status.txt', 'Signing a business partnership contract for the CruMedia Gcom Weite Training Center.txt', 'Democratic Party Future Legislation and Plenary Session.txt', 'Postponing the Punishment Committee to Strengthen the Fairness of the Presidential Procedures.txt', 'KOSPI is the highest in a day.txt', 'Yun Bo-mi, the chief of security, Kim Min, is expected to be a witch poster sports god chemistry.txt', 'Lee Nak-yeon speaking.txt', 'President Lee Yong-gu ordered the exclusion of the chairman of the disciplinary committee, but the controversy over fairness is still.txt', 'Future legislation and standing committee joint meeting.txt', 'Self-supporting iPhone customers will also be insured for loss.txt', 'MOMOLAND Nancy Yoonhan, the evangelist.txt', 'Talkative love.txt', 'Organizational reorganization to Telecom Big Tech Marketing Company.txt', "Red Velvet's first appearance after the Irene Gapjil controversy was star.txt", "The first breakthrough of Samsung Electronics' market in front of the KOSPI's highest peak.txt", 'Disclosure of analysis test tools such as soft wave moa soft etc.txt', 'Big Hit News Eve Live.txt', "Prime Minister Chung Sye-kyun greets participants in Thursday's conversation.txt", "KOSPI's highest-dimensional dollar exchange rate collapse.txt", 'Total start-up of soft wave innovation technology.txt', 'Total new technologies from soft wave platform to medical diagnosis system.txt', 'Self-sufficiency iPhone can be purchased from the day of loss.txt', 'Kim Tae-hee, Psy-almond spoon star, Ahn Jung-joong Live.txt', 'It is difficult to reform the prosecution because of the voice difficult for the prosecution to reform.', 'Self-supporting iPhone loss insurance subscription month.txt', 'Kim Tae-nyeon, floor leader of the National Assembly.txt', "KOSPI's highest ever.txt", 'Kospi is in front of the highest-ever alert line for three consecutive days.txt', 'Trot National Sports Festival Trot War Reminder Release.txt', 'KOSPI closed at record price.txt', 'The Trot Era is held with the Trot National Sports Festival Legend-up.txt', "See you at Big Hit Family Concert. New Year's Countdown stage.txt", 'Self-supporting iPhone is also eligible for loss insurance.txt', "Democratic Party of Korea's powerful organization reform conclusion Opposition to the Airborne Disposal.txt", 'Softwave is preparing for the future as the next generation of domestic solution industry.txt', 'KOSPI Day Ahead of Highest-ever Sunkko.txt', "I'm proud of my spouse's support for Elliot Page, who announced that he would live as a Svstar man.", 'Single Park Myung-soo, Lee Chan-chan, close-knit contact, dog bone greening performance.txt', 'untitled.ui', 'The power of the democratic people is an immediate call for apology.txt', 'Lee Nak-yeon Kim Tae-yeon attending future legislation and smoking meetings.txt']
제데로 번역이 되었다
얼마나 걸리는지 속도 측정을 해보겠다.
비동기화 적용 전
비동기화 적용 후
비동기화로 작업하면 주의해야 할 것들도 많지만 왜 비동기화로 작업해야하는지 시간으로만 봐도 체감이 된다.