728x90
BlockingIOError: [Errno 11] Resource temporarily unavailable
오류는 비차단(non-blocking) 모드에서 I/O 작업이 완료되지 못했을 때 발생하는 예외입니다. 이 오류는 리소스가 일시적으로 사용 불가능하거나, 아직 준비되지 않은 상태에서 접근했을 때 나타납니다.
주로 소켓(socket), 파일 디스크립터, 파이프 등에서 비차단 모드로 설정했을 때 발생하며, 이벤트 루프 또는 셀렉터 기반 프로그래밍에서 고려해야 할 오류입니다.
● 오류 발생 예시
import socket
s = socket.socket()
s.setblocking(False)
s.connect(("example.com", 80))
위 코드처럼 소켓을 비차단 모드로 설정한 뒤 연결을 시도하면 BlockingIOError가 발생할 수 있습니다.
● 주요 원인
- 소켓이나 파일 디스크립터가 아직 준비되지 않음
- 비차단 모드에서 즉시 완료되지 않은 작업을 시도
- 시스템 자원이 일시적으로 사용 불가능한 상태
● 해결 방법
try-except
블록으로 예외를 감지하고 재시도 로직 구현- select, poll, epoll 등의 이벤트 대기 메커니즘 사용
- 자원이 준비되었을 때만 I/O 작업 수행
● 예시 코드 (예외 처리)
import socket
import time
s = socket.socket()
s.setblocking(False)
try:
s.connect(("example.com", 80))
except BlockingIOError:
print("연결 대기 중...")
time.sleep(1)
● 결론
BlockingIOError
는 비동기 I/O 프로그래밍에서 필연적으로 마주치는 오류로, 비차단 모드에서는 자원이 준비될 때까지 적절한 대기나 예외 처리가 필요합니다. 이를 무시하면 프로그램이 예기치 않게 종료되거나, 불완전한 처리가 발생할 수 있습니다.
728x90