2013-07-23 16 views
5

Ho utilizzato Sidekiq con successo per eseguire processi in background avviati dalle azioni dell'utente in un'applicazione Rails 3.2. La mia particolare applicazione comporta l'invio e la ricezione di dati da e fonti esterne tramite un'API di terze parti.Come posso eseguire un lavoro in background continuo con Sidekiq?

Ho bisogno di mantenere i dati sincronizzati con questa fonte esterna controllando continuamente per ciascun utente se ci sono dati disponibili per il download.

Tutti i miei lavori in background finora sono avviati dall'utente come ho detto sopra. La mia domanda è, se voglio controllare continuamente per l'esistenza di dati esterni per ciascun utente, in un ciclo while Mi immagino:

# pseudocode 
while true 

    for user in User.active 
    data = user.get_data 
    next if data.blank? 

    UserDataWorker.perform_async(user.id) 

    end 
end 

poi Dove metto il codice di cui sopra? Mi confondo su come generare un'attività continua. Non voglio mettere il codice in un lavoratore Sidekiq, perché sarà solo un lavoro che non ha mai completato. O dovrei farlo?

Non voglio inserirmi in un'attività di rake, perché in che modo è possibile monitorare l'attività di rake? Tutto ciò che ho letto su Sidekiq sembra indicare un lavoratore che esegue un'attività che è finita e che può essere completata o errata. Apprezzo qualsiasi aiuto tu possa offrire.

+0

come utilizzare il cron job? – mkk

+0

Ci ho pensato, ma cron è più orientato alle attività e quello che sto cercando è più simile a un demone. – AKWF

risposta

3

Il multithreading rubino è proprio per questo. Crea una discussione nella cartella degli inizializzatori:

Thread.new do 

    while true 

    for user in User.active 
     data = user.get_data 
     next if data.blank? 

     UserDataWorker.perform_async(user.id) 
    end 
    sleep 1 

    end 
end 

Se i tuoi assegni non hanno bisogno di molte risorse, dovrebbe essere tutto a posto.

Problemi correlati