threading.Thread()
는 Python 표준 라이브러리 중 하나로, 간단하게 백그라운드에서 비동기 작업을 수행할 수 있게 해주는 도구입니다.
별도의 외부 라이브러리 설치 없이 사용할 수 있으며, 간단한 병렬 처리를 구현할 때 유용합니다.
1. 언제 사용하나
- 작업이 오래 걸리지만 실패해도 치명적이지 않은 경우
- 웹 서버에서 사용자 응답을 빠르게 주고, 나머지 후처리를 별도로 처리하고 싶을 때
- Celery, Redis 같은 무거운 시스템을 도입하기 전, 경량으로 비동기 처리를 하고 싶을 때
2. 사용 판단 기준
상황 | 추천 여부 |
---|---|
응답을 빠르게 주고 싶을 때 | ✅ 사용 적합 |
작업 시간이 짧거나 중간 정도일 때 | ✅ 사용 적합 |
작업 실패 시 치명적이지 않은 경우 | ✅ 사용 적합 |
안정성과 모니터링이 중요한 경우 | ❌ Celery 등 사용 권장 |
데이터베이스 트랜잭션을 신중하게 다뤄야 할 때 | ⚠️ ORM 사용 주의 필요 |
3. 사용 예시
import threading
import time
def background_task():
print("백그라운드 작업 시작")
time.sleep(3)
print("백그라운드 작업 완료")
# 스레드 실행
thread = threading.Thread(target=background_task)
thread.start()
print("메인 스레드 종료")
target=함수명
: 실행할 함수 지정
args=(arg1, arg2, ...)
로 인자 전달 가능
.start()
를 호출해야 스레드가 실제로 실행됨
4. Django에서 사용 시 주의사항
- Django의 ORM은 thread-safe하지 않으므로, DB 트랜잭션 처리에 주의
- 스레드 내부에서 예외가 발생해도 자동으로 잡히지 않음 → 반드시
try/except
사용 - 요청과 관련된 정보를 스레드 내부에서 사용할 경우, 유효한지 확인 필요 (예: request.user 등)
- 로그를 통해 후처리 작업의 실패 여부를 감지할 수 있도록 구현 권장
5. 정리
장점 | 단점 |
---|---|
간편함 (설치 불필요) | 자동 재시도/모니터링 불가 |
응답 속도 향상 | ORM과의 충돌 가능성 |
초경량 비동기 처리 가능 | 작업 실패 시 관리 어려움 |
6. Jesse의 코멘트
threading.Thread()
는 서버에 큰 부담을 주지 않고 빠르게 비동기 처리를 할 수 있는 아주 훌륭한 방법입니다.
Celery로 가기 전의 중간 단계로서, 실전에서 충분히 강력한 도구가 될 수 있습니다.
Add a New Comment