기본 콘텐츠로 건너뛰기

라벨이 비동기 프로그래밍인 게시물 표시

Python에서 asyncio 완전 정복 (await, async, gather 등)

어휴, 요즘 파이썬으로 비동기 프로그래밍 하는 재미에 푹 빠졌어요! 특히 asyncio 는 정말 마법 같더라고요. 처음엔 좀 낯설었는데, 익숙해지니까 속도 향상이 눈에 띄게 느껴져서 완전 반해버렸습니다. 이 글에선 제가 asyncio 를 배우면서 깨달은 점들을 풀어놓을게요. 혹시 비동기 프로그래밍이 뭔지 잘 모르시겠다면, 간단히 말해 여러 작업을 동시에 처리해서 프로그램 속도를 엄청나게 높이는 기술이라고 생각하시면 돼요. 마치 여러 요리사가 동시에 음식을 만들어서 손님에게 빨리 제공하는 것과 비슷하죠! 일단 async 와 await 라는 녀석들이 핵심인데요, async 는 함수 앞에 붙여서 "얘는 비동기 함수야!"라고 선언하는 거예요. 그리고 await 는 다른 비동기 함수가 끝날 때까지 기다리라고 지시하는 역할을 하죠. 예를 들어, 네트워크에서 데이터를 가져오는 함수가 있다면, await 를 사용해서 데이터가 다 가져올 때까지 기다렸다가 다음 작업을 진행할 수 있어요. 그 동안 다른 작업을 처리할 수 있으니, 마치 멀티태스킹을 하는 것처럼 느껴져요. 신기하지 않나요? 그리고 asyncio.gather 는 여러 비동기 함수를 동시에 실행하고 결과를 모아주는 아주 유용한 친구입니다. 제가 웹사이트 여러 개에서 데이터를 동시에 가져와야 할 때 정말 요긴하게 썼어요. 하나씩 순서대로 가져오는 것보다 훨씬 빠르더라고요! 마치 여러 개의 탭을 동시에 열어놓고 작업하는 것과 같다고 생각하시면 될 것 같아요. 실제로 제가 썼던 코드를 보여드릴게요. 세 개의 웹사이트에서 데이터를 가져오는 예제인데요. (아래 코드 삽입) 이 코드를 보시면, fetch_data 함수가 각 웹사이트에서 데이터를 가져오는 역할을 하고, asyncio.gather 가 이 함수들을 동시에 실행하도록 도와주는 것을 볼 수 있을 거예요. asyncio.sleep(2) 는 네트워크 지연을 시뮬레이션하기 위해 넣...

Django + Celery + Redis로 비동기 작업 처리하기 (실전 예제 포함)

Django + Celery + Redis로 비동기 작업 처리하기 (실전 예제 포함) 안녕하세요! 오늘은 Django에서 Celery와 Redis를 사용하여 비동기 작업을 처리하는 방법에 대해 알아보겠습니다. 이 조합은 이메일 발송, 데이터 처리, 파일 변환 등 시간이 오래 걸리는 작업을 비동기적으로 처리할 때 매우 유용합니다. 왜 비동기 처리가 필요할까요? 웹 애플리케이션에서 다음과 같은 작업들은 사용자 경험을 해칠 수 있습니다: 대용량 파일 처리 이메일 발송 외부 API 호출 복잡한 데이터 분석 이미지 처리 이러한 작업들을 동기적으로 처리하면 사용자는 작업이 완료될 때까지 기다려야 합니다. 비동기 처리를 통해 이러한 문제를 해결할 수 있습니다. 프로젝트 설정 먼저 필요한 패키지들을 설치합니다: pip install celery redis django-celery-results Redis 설치 (Windows) Windows에서는 Redis를 설치하기 위해 WSL2를 사용하거나, Docker를 사용하는 것을 추천드립니다: docker run -d -p 6379:6379 redis Django 설정 settings.py 에 Celery 설정을 추가합니다: # Celery 설정 CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' CELERY_ACCEPT_CONTENT = ['json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_TIMEZONE = 'Asia/Seoul' # Celery Beat 설정 (주기적 작업) CELERY_BEAT_SCHEDULE = { 'che...