2010-01-19 41 views
7

Me resulta difícil entender cómo funcionan las señales en mi aplicación (y cómo funcionan durante el período). Estas son tres áreas en las que supongo que se aplicarían (con mi conocimiento actual):Django: ¿Para qué sirven exactamente las señales?

  1. Envíe XML a un servidor remoto para informar (después de que se complete una transacción).
  2. Cambie el tamaño de una imagen y cargue la miniatura a S3 después de que un usuario la cargue.
  3. Borre las imágenes antiguas de S3 después de que un usuario elimine un objeto de imagen de su cuenta.

Estoy completamente fuera de la base (creo que podría ser). ¿Recibo señales y multi hilos mezclados? Si es así, ¿comparan allí la aplicación? ¿Son solo para desacoplarse? Además, ¿cuál es el problema con asegurarse de crear instancias anticipadas y no utilizar una función local (porque obtendrán basura recolectada)? ¿Puede alguien dar más detalles sobre eso? ¿Debo ponerlos todos en el middleware de solicitud para que no tenga que preocuparme?

+0

No entiendo su referencia a multi threading. ¿Cuál es el punto de? –

+0

@Andrea Zilio Ver comentarios en la respuesta 1 – orokusaki

Respuesta

15

Django Signals son una forma de realizar una acción A en respuesta a un evento E.

En un mundo irreal, puede evitar el uso de señales modificando el código donde ocurre el evento E y agregando el código para realizar la acción A.

El problema es que al hacerlo se suelta de mantenimiento, facilidad de lectura y una gran cantidad de otros adjetivos de ingeniería de software :)

señales le permiten hacer lo mismo indipendently de dónde o cómo se produce el evento E y así lo hace, de una manera inteligente que permita mantenimiento, legibilidad, etc. ...

Sí, creo que decir que las señales son útiles para habilitar el desacoplamiento es realmente cierto.

(También mencionaste multi threading. Si lo hiciste porque crees que las señales son buenas porque se ejecutan concurrentemente y tan rápido ... Bueno ... no sé si se ejecutan al mismo tiempo pero de todos modos realmente no creo que este es el punto para el que las señales django son útiles)

Un ejemplo de una buena forma de aprovechar las señales es el hecho de que cuando desea almacenar otra información a un usuario en django tiene para usar Userprofiles. En este caso, el documentation itself, le dice que puede ser conveniente registrar una señal en respuesta a cualquier creación de nuevos usuarios solo para agregar a los nuevos usuarios creados un perfil de usuario vacío.

+7

Las señales de Django se envían sincrónicamente. –

+0

@Ignacio Mi intención no era decir que las señales se ejecutaran al mismo tiempo, sino solo tratar de imaginar por qué se mencionaba el multihilo en la pregunta ... No sabía cómo se manejaban. Ahora lo hago. Gracias Ignacio;) –

+0

¿Considerarías las 3 tareas en mi lista como buenas candidatas para realizar señales? – orokusaki

3

Aquí hay un ejemplo que puede ayudar.

Supongamos que necesita realizar alguna acción cuando se guarda una instancia de modelo. Sin embargo, esta acción no tiene nada que ver directamente con el modelo o la instancia del modelo. Por lo tanto, tiene poco sentido colocar el código para su acción en un método save() en el modelo. Causaría acoplamiento de código innecesario y desorden. En su lugar, puede crear un manejador de señal en otro lugar de su aplicación (o incluso en otra aplicación) donde tenga más sentido.

1

que realizaría tareas 2 y 3 (las imágenes cosas) con algo así como una cola de tareas asíncronas, como Celery

que es similar a multihilo.

Cuestiones relacionadas