Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

417
Vistas
¿Puede el punto muerto select_for_update de Django cuando se usa en el mismo registro dos veces?

Tengo un código que sería mucho más simple con llamadas anidadas a select_for_update() , pero me temo que me estoy preparando para un punto muerto.

Ejemplo:

 with transaction.atomic(): uu1 = UniUser.objects.select_for_update().get(pk=uupk) with transaction.atomic(): uu2 = UniUser.objects.select_for_update().get(pk=uupk) # why no deadlock here?? uu2.bio = 'i like pizza' uu2.save() uu1.bio = 'i like pie' uu1.save()

Habría esperado que el segundo select_for_update() se bloqueara, ya que está tratando de bloquear un registro ya bloqueado, pero este código funciona bien y terminamos con 'i like pie' en la biografía. Lo mismo sucede si elimino la transacción interna y solo bloqueo el mismo registro dos veces en la misma transacción.

¿Por qué no hay punto muerto aquí? ¿Es este un código seguro?

En caso de que la respuesta sea específica de la base de datos, estoy usando Postgres.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El candado es adquirido y retenido por su transacción.

Cuando intenta tomarlo nuevamente, no sucede nada ya que su transacción ya tiene un candado en esa fila.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda