아주 간단합니다. 다만, googletrans의 최신 버전은 내부적으로 비동기 함수를 사용하기 때문에, translator.translate() 호출 시 await를 사용하지 않으면 coroutine 객체가 반환됩니다. 그러므로, await 문법을 사용하지 않는 googletrans의 구버전(4.0.0-rc1)을 설치하여 번역 프로그램을 만들수도 있습니다.
1단계: async와 await 사용
비동기 방식을 사용하기 위해, asyncio 라이브러리를 사용하여 코드를 비동기적으로 실행해야 합니다.
import googletrans
import asyncio # asyncio 라이브러리 추가
async def main():
"""
비동기 방식으로 번역을 실행하는 메인 함수
"""
translator = googletrans.Translator()
str_1 = "오늘은 가을비가 내리는 아침입니다."
# translate 함수가 비동기 함수이므로, await를 사용해 결과를 기다립니다.
result_1 = await translator.translate(str_1, dest="en", src="auto")
print(f"오늘은 가을비가 내리는 아침입니다. -> {result_1.text}")
str_2 = "I am so happy."
# 마찬가지로 await를 사용합니다.
result_2 = await translator.translate(str_2, dest="ko", src="auto")
print(f"I am so happy => {result_2.text}")
if __name__ == "__main__":
# asyncio.run()을 사용하여 비동기 함수인 main()을 실행합니다.
asyncio.run(main())
- import asyncio: Python의 비동기 프로그래밍을 위한 핵심 라이브러리입니다.
- async def main():: async 키워드는 이 함수가 비동기 함수임을 명시합니다.
- await translator.translate(): await 키워드는 translate() 함수가 작업을 완료할 때까지 기다리라고 지시합니다. 이 과정에서 다른 작업을 동시에 처리할 수 있어 효율적입니다.
- asyncio.run(main()): asyncio.run() 함수는 비동기 프로그램을 시작하는 진입점 역할을 합니다. 이 함수를 통해 main() 함수가 실행되고, await로 표시된 모든 비동기 작업이 완료될 때까지 기다립니다.
2단계: 영문 문서를 번역해서, 한글 문서에 저장하기
import googletrans
import asyncio
from os import linesep
async def main():
translator = googletrans.Translator()
read_file_path = "원문(영문).txt"
write_file_path = "원문번역(한글).txt"
with open(read_file_path, "r") as f:
read_lines = f.readlines()
for lines in read_lines:
result = await translator.translate(lines, dest="ko", src="en")
print(result.text)
with open(write_file_path, "a", encoding="utf-8") as f:
f.write(result.text + "\n")
if __name__ == "__main__":
asyncio.run(main())
[ 참조 ] coroutine
coroutine은 파이썬에서 비동기(asynchronous) 프로그래밍을 가능하게 하는 특별한 함수입니다. 일반 함수와 달리, 실행 중에 잠시 멈췄다가 나중에 다시 이어서 실행될 수 있는 특징을 가지고 있습니다.
가. coroutine의 핵심 개념
일반 함수가 시작부터 끝까지 한 번에 실행되는 반면, coroutine은 await 키워드를 만나면 실행을 잠시 중단하고 제어권을 다른 coroutine에게 넘겨줍니다. 그리고 await 대상 작업(예: 네트워크 요청, 파일 읽기 등)이 완료되면 다시 실행을 재개합니다.
이러한 특성 덕분에 하나의 프로그램이 여러 작업을 동시에 처리하는 것처럼 보이게 만들 수 있습니다.
나. coroutine이 필요한 이유
예를 들어, 웹사이트 100개에서 정보를 가져오는 프로그램을 만든다고 가정해 봅시다.
- 동기식(Synchronous):
- 1번 웹사이트 요청 → 응답을 기다림 (10초 소요)
- 2번 웹사이트 요청 → 응답을 기다림 (10초 소요)
- ...
- 총 1000초가 걸립니다.
- 비동기식(Asynchronous) - Coroutine 활용:
- 1번 웹사이트 요청 → await
- 2번 웹사이트 요청 → await
- 3번 웹사이트 요청 → await
- ...
- 100개의 요청을 동시에 보낸 뒤, 응답이 오는 대로 결과를 처리합니다. 가장 오래 걸리는 요청 시간만큼의 시간이 소요되어 전체 작업 시간이 획기적으로 줄어듭니다.
Coroutine은 이런 I/O 작업(Input/Output)이 많은 프로그램에서 빛을 발합니다. 컴퓨터가 데이터를 기다리는 동안 다른 작업을 처리하도록 만들어 효율성을 극대화합니다.
반응형
'AI, 클라우드, 문서, 자동화 > 파이썬 요리조리' 카테고리의 다른 글
간단한 Word 자동화 프로그램, 다산 정약용의 유배지에서 보낸 편지 (0) | 2025.09.05 |
---|---|
당황하지 말자, 기억나지 않는 문서 암호/비밀번호 찾기(2) (0) | 2025.08.22 |
당황하지 말자, 기억나지 않는 문서 암호/비밀번호 찾기(1) (0) | 2025.08.22 |
내부 IP & 외부 IP 조회(함수, 클래스까지 정리) (0) | 2025.08.21 |