Domanda

im cercando di scrivere un demone che:

  • legge un messaggio da una coda (SQS, coniglio mq, qualunque cosa ...) che contengono un percorso di un file zip
  • aggiorna un record nel database dicendo qualcosa come "questo lavoro sta elaborando"
  • legge il contenuto del citato dell'archivio e inserisce una riga in un database w / informazioni abbattuti dai dati Meta File per ogni file trovato
  • duplica ogni file per s3
  • cancella il file zip
  • segna il lavoro come "completo"
  • leggi messaggio successivo nella coda, ripetere

questo dovrebbe essere in esecuzione come un servizio, e iniziata da un messaggio in coda quando qualcuno carica un file tramite l'interfaccia web. l'uploader non ha bisogno di vedere immediatamente i risultati, ma l'upload essere processato in background abbastanza speditamente.

im fluente con python, quindi la prima cosa che viene in mente sta scrivendo un semplice server con intrecciato per gestire ogni richiesta ed effettuare il processo di cui sopra. ma, non ho mai scritto nulla di simile che potrebbe funzionare in un contesto multi-utente. la sua non intenzione di servire centinaia di arrivi al minuto o ora, ma sarebbe bello se potesse gestire diversi alla volta, ragionevole. Anche io non sono terribilmente familiarità con la scrittura di applicazioni multi-threaded e si occupano di questioni come il blocco.

come sono le persone risolto questo in passato? quali sono alcuni altri approcci ho potuto prendere?

Grazie in anticipo per qualsiasi aiuto e la discussione!

È stato utile?

Soluzione 3

ho optato per utilizzare una combinazione di sedano ( http://ask.github.com/ sedano / introduction.html), RabbitMQ, e una vista semplice Django per gestire il caricamento. il flusso di lavoro è simile al seguente:

  1. vista Django accetta, negozi caricare
  2. un Task sedano, viene incaricato di elaborare il caricamento. tutto il lavoro è fatto all'interno della Task.

Altri suggerimenti

Ho usato Beanstalkd come un demone di accodamento per effetto molto buono (un po 'near-time l'elaborazione e il ridimensionamento delle immagini - oltre 2 milioni finora nelle ultime settimane). Gettare un messaggio nella coda con il nome del file zip (forse da una directory specifica) [I puntate un comando e parametri in JSON], e al momento della prenotazione il messaggio nella operaio-client, nessun altro può farlo, a meno che non si consente al timeout (quando va di nuovo alla coda per essere prelevati).

Il resto è la decompressione e caricamento su S3, per il quale ci sono altre librerie.

Se si desidera gestire più file zip in una sola volta, eseguire il maggior numero di processi di lavoro che si desidera.

Vorrei evitare di fare qualsiasi cosa multi-threaded e di utilizzare invece la coda e il database di sincronizzare il maggior numero di processi di lavoro come si cura per l'avvio.

Per questa applicazione Penso contorto o qualsiasi quadro di riferimento per la creazione di applicazioni server sta per essere eccessivo.

Keep it simple. script Python si avvia, controlla la coda, fa un certo lavoro, controlla di nuovo la coda. Se si desidera una corretta demone in background si potrebbe desiderare di fare solo che si stacca dal terminale come descritto qui: Come si crea un demone in Python?

Aggiungete un po 'di registrazione, forse un blocco try / except a e-mail fuori fallimenti a voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top