배경:
Postgres 데이터베이스와 함께 Django를 사용하는 프로젝트를 진행 중입니다. 내 웹 검색 중 일부가 언급했기 때문에 중요한 경우 mod_wsgi를 사용하고 있습니다. 웹 양식 제출에서 Django 뷰는 상당한 시간 (사용자가 기다리는 것보다 더 많은 시간)이 걸리는 작업을 시작하므로 백그라운드에서 시스템 호출을 통해 작업을 시작합니다. 현재 실행중인 작업은 데이터베이스를 읽고 쓸 수 있어야합니다. 이 작업은 너무 오래 걸리기 때문에 다중 처리를 사용하여 일부를 병렬로 실행합니다.
문제:
최상위 스크립트에는 데이터베이스 연결이 있으며 자식 프로세스를 생성 할 때 부모의 연결을 자식이 사용할 수있는 것처럼 보입니다. 그런 다음 쿼리 전에 SET TRANSACTION ISOLATION LEVEL을 호출해야하는 방법에 대한 예외가 있습니다. 연구에 따르면 이는 여러 프로세스에서 동일한 데이터베이스 연결을 사용하려고하기 때문입니다. 내가 찾은 한 스레드는 자식 프로세스의 시작 부분에서 connection.close ()를 호출하여 Django가 필요할 때 자동으로 새 연결을 생성하므로 각 자식 프로세스가 고유 한 연결을 갖도록 제안했습니다. 즉, 공유되지 않습니다. 자식 프로세스에서 connection.close ()를 호출하면 부모 프로세스가 연결이 끊어 졌다고 불평했기 때문에 이것은 작동하지 않았습니다.
기타 조사 결과 :
내가 읽은 일부 내용은 실제로 이것을 할 수 없으며 다중 처리, mod_wsgi 및 Django가 함께 잘 작동하지 않는다는 것을 나타내는 것 같습니다. 믿을 수없는 것 같아요.
일부는 장기적인 해결책이 될 수있는 셀러리 사용을 제안했지만 현재로서는 셀러리를 설치할 수 없으며 일부 승인 절차를 보류 중이 어서 지금은 옵션이 아닙니다.
SO 및 다른 곳에서 영구 데이터베이스 연결에 대한 여러 참조를 찾았는데, 이는 다른 문제라고 생각합니다.
또한 psycopg2.pool 및 pgpool에 대한 참조와 bouncer에 대한 내용을 찾았습니다. 사실, 나는 그 책들에서 내가 읽고있는 내용의 대부분을 이해하지 못했지만, 확실히 내가 찾고있는 것으로 튀어 나오지는 않았습니다.
현재 "해결 방법":
지금은 직렬로 실행하는 것으로 되 돌렸고 작동하지만 원하는 것보다 느립니다.
다중 처리를 사용하여 병렬로 실행하는 방법에 대한 제안 사항이 있습니까? 내가 부모를 가질 수 있고 두 자녀가 모두 데이터베이스에 독립적으로 연결되어 있다면 모든 것이 괜찮을 것 같지만 그 행동을 얻을 수없는 것 같습니다.
감사합니다. 길이 죄송합니다!