본문 바로가기

소프트웨어 이야기/프로그래밍 언어와 프레임워크

[Django] Django에서 MultiProccess 사용 시 주의사항

Django에서는 하나의 프로세스에서 하나의 커넥션을 맺는 것을 가정하고 있다. 

그러나 Python에서는 프로세스를 사용하는 경우, 자식 프로세스에서 부모 프로세스의 자원을 복제한다.

때문에 Django에서 멀티프로세스를 사용하는 경우, 위와 같은 처리 때문에 오류가 발생하기 쉽다.

 

해당 문제의 대표적인 해결안으로는 자식 프로세스 시작 시, 모든 커넥션을 닫아주는 방법이 있다.

 

def close_service_connections():
    # close db connections, they will be recreated automatically
    db.connections.close_all()

    # close ES connection, needs to be manually recreated
    connections.connections.remove_connection("default")

    # close redis connections, will be recreated automatcially
    for k in settings.CACHES.keys():
        caches[k].close()

 

참고 

[Medium] Django Multiprocessing

[StackOverFlow] Django multiprocessing and database connections