2010-01-19 2 views
7

Ho difficoltà a capire come funzionano i segnali nella mia applicazione (e come funzionano il periodo). Si tratta di tre aree in cui presumo che si applicherebbero (con la mia conoscenza attuale):Django: A cosa servono esattamente i segnali?

  1. Invia XML a un server remoto per la segnalazione (dopo una transazione è completa).
  2. Ridimensiona un'immagine e carica l'anteprima su S3 dopo che l'utente lo ha caricato.
  3. Elimina le vecchie immagini da S3 dopo che un utente elimina un oggetto immagine dal proprio account.

Sono completamente fuori base (credo di poter essere). Sto ricevendo segnali e multi threading mischiato? In tal caso, si confrontano nella domanda? Sono solo per il disaccoppiamento? Inoltre, qual è il problema di assicurarti di istanziarli in anticipo e di non utilizzare una funzione locale (perché raccoglieranno i dati inutili)? Qualcuno può elaborarlo? Dovrei metterli tutti nel middleware richiesto in modo che non debba preoccuparmi?

+0

Non capisco il tuo riferimento al multi-threading. Qual e il punto? –

+0

@Andrea Zilio Vedere i commenti sulla risposta 1 – orokusaki

risposta

15

I segnali di Django sono un modo per eseguire un'azione A in risposta a un evento E.

In un mondo irreale è possibile evitare l'uso dei segnali modificando il codice in cui si verifica l'evento E e aggiungendo il codice per eseguire l'azione A.

Il problema è che così facendo perdi manutenibilità, leggibilità e un sacco di altri aggettivi di ingegneria del software :)

segnali ti permettono di fare la stessa cosa indipendentemente da dove o come si verifica l'evento E e così facendo così in modo intelligente che consenta la manutenzione, la leggibilità, ecc ...

Sì, penso che dire che i segnali siano utili per abilitare il disaccoppiamento è proprio vero.

(Hai anche menzionato il multi threading, se lo hai fatto perché ritieni che i segnali siano buoni perché vengono eseguiti simultaneamente e così rapidamente ... beh ... non so se vengono eseguiti contemporaneamente ma in ogni caso io davvero non credo che questo sia il motivo per cui i segnali di django sono utili)

Un esempio di un buon modo per sfruttare i segnali è il fatto che quando si desidera memorizzare altre informazioni per un utente in django si ha utilizzare i profili utente. In questo caso, lo documentation itself indica che può essere conveniente registrare un segnale in risposta a qualsiasi creazione di nuovi utenti solo per aggiungere ai nuovi utenti creati un profilo utente vuoto.

+7

I segnali di Django vengono definitivamente inviati in modo sincrono. –

+0

@Ignacio La mia intenzione non era quella di dire che i segnali sono eseguiti simultaneamente, ma solo per cercare di immaginare perché il threading multiplo è stato menzionato nella domanda ... Non sapevo come venivano gestiti. Ora faccio. Grazie Ignacio;) –

+0

Considereresti i 3 compiti nella mia lista come buoni candidati da esibire tramite segnali? – orokusaki

3

Ecco un esempio che può essere d'aiuto.

Supponiamo di dover eseguire qualche azione quando viene salvata un'istanza del modello. Tuttavia, questa azione non ha nulla a che fare direttamente con il modello o l'istanza del modello stessa. Quindi ha poco senso inserire il codice per la tua azione in un metodo save() sul modello. Provocherebbe l'accoppiamento e il disordine del codice non necessari. Invece puoi creare un gestore di segnale da qualche altra parte nella tua applicazione (o anche in un'altra applicazione) dove ha più senso.

1

mi debbano svolgere le operazioni 2 e 3 (le immagini roba) con qualcosa di simile a una coda compito asincrona, come Celery

che è simile a multithreading.