2010-06-21 13 views
8

Mam aplikację Django, która używa MySQL i silnika InnoDB do przechowywania. Z jakiegoś powodu Django czasami pozostawia blokady w miejscu, nawet po zakończeniu kwerendy. (Widzę ich z Innotop).dlaczego django pozostawia blokady w mysql?

Jedynymi operacjami przetwarzania transakcji, które wykonuję w moim kodzie jest to, że mam django.db.transaction.commit_on_success określone dla niektórych moich metod save(), w których pracuję z dziedziczeniem wielu tabel.

Jeśli zrestartuję serwer Apache, blokady znikną.

Czy ktoś widział coś takiego? Czy mógłbym napisać coś w rodzaju anty-wzoru, który by to spowodował?

Odpowiedz

1

Jedynym momentem, w którym udało mi się tego dokonać, było skonfigurowanie "zaplanowanych" zadań w Django, które nie były związane z żądaniami/widokami. Domyślny system obsługi transakcji automatycznych zatwierdza transakcje tylko wtedy, gdy para żądań/odpowiedzi jest zakończona i odesłana do użytkownika końcowego, więc tworzenie zadań kron-esque, które działają bez wysłania żądania, powoduje pominięcie tego mechanizmu.

W przeciwnym razie generalnie trudno jest uniemożliwić zwolnienie blokady. Jesteś pewien, że nie ma zbyt długich bloków kodu (być może polegających na zewnętrznej usłudze, która kończy się na czasie lub coś w tym rodzaju), wiążących rzeczy?

Powiązane problemy