2010-06-21 16 views
8

Tengo una aplicación Django que utiliza MySQL y el motor InnoDB para el almacenamiento. Por alguna razón, Django a veces deja bloqueos en su lugar, incluso después de que la consulta se haya completado. (Puedo verlos con Innotop).¿Por qué Django deja bloqueos en mysql?

El único aspecto del manejo de transacciones que hago en mi código es que he especificado django.db.transaction.commit_on_success para algunos de mis métodos save() en los que estoy trabajando con la herencia de varias tablas.

Si reinicio el servidor Apache, los bloqueos desaparecerán.

¿Alguien ha visto algo como esto? ¿Pude haber escrito algún anti patrón que causaría esto?

Respuesta

1

La única vez que logré lograr esto fue configurando tareas "programadas" en Django que no estaban relacionadas con solicitudes/vistas. El sistema predeterminado de gestión de transacciones automáticas solo compromete las transacciones cuando se completa un par de solicitud/respuesta y se envía de vuelta al usuario final, por lo que la creación de trabajos kron-esque que se ejecutan sin que se envíe una solicitud evita ese mecanismo.

De lo contrario, en general es bastante difícil hacer que no se suelte un bloqueo. ¿Estás seguro de que no existen bloques de código extremadamente largos (tal vez confiando en un servicio externo que se agote el tiempo o algo por el estilo) atando las cosas?

Cuestiones relacionadas