2010-06-21 1 views
8

MySQL과 InnoDB 엔진을 스토리지로 사용하는 Django 앱이 있습니다. 어떤 이유로 Django는 질의가 완료된 후에도 잠금 기능을 유지하기도합니다. (나는 Innotop으로 그들을 볼 수있다).django가 mysql에서 잠금을 남겨두고있는 이유는 무엇입니까?

내 코드에서 수행하는 유일한 트랜잭션 처리 작업은 다중 테이블 상속을 사용하여 작업하는 일부 save() 메소드에 대해 django.db.transaction.commit_on_success를 지정했기 때문입니다.

Apache 서버를 다시 시작하면 잠금이 사라집니다.

이런 사람이 있습니까? 이 문제의 원인이 될만한 반 패턴을 작성 했습니까?

답변

1

내가 이것을 달성 할 수 있었던 유일한 시간은 장고에서 요청 /보기와 관련이없는 "예정된"작업을 설정하는 것이 었습니다. 기본 자동 커밋 트랜잭션 처리 시스템은 요청/응답 쌍이 완료되어 최종 사용자에게 다시 전송 될 때만 트랜잭션을 커밋하므로 요청을 보내지 않고 실행되는 크론 에스 케스크 작업을 생성하면 해당 메커니즘을 우회합니다.

그렇지 않으면 일반적으로 잠금을 해제하지 못하게하는 것이 꽤 어렵습니다. 매우 장기간에 걸친 코드 블록이 없다는 것을 확신 할 수 있습니다 (아마 시간 초과 또는 일종의 외부 서비스에 의존 할 것입니다).