Se questa è una domanda idiota, mi scuso e andrò nascondere la mia testa per la vergogna, ma:Python/RQ - monitoraggio dello stato operaio
sto usando RQ fare la fila posti di lavoro in Python. Voglio che funzioni in questo modo:
- Il lavoro A inizia. Job A acquisisce i dati tramite l'API Web e li archivia.
- Il lavoro A funziona.
- Il lavoro A è completo.
- Al termine di A, viene avviato il lavoro B. Il lavoro B controlla ogni record archiviato dal lavoro A e aggiunge alcuni dati di risposta aggiuntivi.
- Al termine del lavoro B, l'utente riceve una e-mail felice che dice che il rapporto è pronto.
Il mio codice finora:
redis_conn = Redis()
use_connection(redis_conn)
q = Queue('normal', connection=redis_conn) # this is terrible, I know - fixing later
w = Worker(q)
job = q.enqueue(getlinksmod.lsGet, theURL,total,domainid)
w.work()
ho assunto la mia soluzione migliore era quella di avere 2 lavoratori, uno per lavoro A e uno per la B. Il lavoratore lavoro B potrebbe Job Monitor A e, quando il lavoro A è stato fatto, inizia il lavoro B.
Quello che non riesco a capire per salvarmi è come ottengo un lavoratore per monitorare lo stato di un altro. Posso prendere l'ID del lavoro dal lavoro A con job.id. Posso prendere il nome del lavoratore con w.name. Ma non ho il più pallido su come passare nessuna di queste informazioni all'altro lavoratore.
Oppure, c'è un modo molto più semplice per farlo che mi manca del tutto?
Se il lavoro B non può essere eseguito finché il lavoro A non è completo (il che implica che non possono essere eseguiti in parallelo), perché utilizzare rq? Eseguili in ordine sequenziale (in un thread o processo separato se non vuoi bloccare la tua applicazione) –
I lavori per A e B occupano un tempo molto lungo e possono svolgersi separatamente, quindi mi piacerebbe essere in grado di Continui a fare un sacco di lavoro A indipendente dal lavoro B. Se è troppo difficile, posso comunque arrendermi. – user1066609
Avete coppie A e B che vanno insieme, o una B può dipendere da qualsiasi A? Perché in quest'ultimo caso hai un problema di sincronizzazione. :-) –