Definiti graficele de dependenta ale joburilor Sidekiq

Prezentare generala

Sidekiq Superworker va permite sa creati super-lucratori, care sunt grafice simple sau complexe ale lucratorilor Sidekiq.

De exemplu, puteti defini graficele complexe ale lucratorilor si puteti utiliza atat configuratii lucratoare seriale, cat si paralele:

(Worker10 va rula dupa ce Worker5, Worker7, Worker8 si Worker9 au finalizat toate.)

Superworker.define (: MySuperworker,: user_id,: comment_id) do Worker1: user_id Worker2: user_id do parallel do Worker3: comment_id do Worker4: comment_id Worker5: comment_id end Worker6: user_id do paralel do Worker7: user_id Worker8: user_id Worker9: user_id end end Worker10: comment_id end end

Si il puteti rula ca orice alt lucrator:

MySuperworker.perform_async (23, 852)

De asemenea, puteti defini secvente seriale simple ale lucratorilor:

Superworker.define (: MySuperworker,: user_id,: comment_id) do Worker1: user_id,: comment_id Worker2: comment_id Worker3: user_id end

Instalare

Includeti-l in fisierul dvs. Gem:

bijuterie „sidekiq-superworker”

Utilizare

Mai intai, definiti un super-lucrator intr-un fisier inclus in timpul initializarii aplicatiei. Daca utilizati Rails, puteti face acest lucru intr-un initializator:

# config / initializers / superworkers.rb Dir [‘./ app / superworkers / *’]. each {| f | require f} # app / superworkers / my_superworker.rb Superworker.define (: MySuperworker,: user_id,: comment_id) do Worker1: user_id,: comment_id Worker2: comment_id end # app / superworkers / my_other_superworker.rb Superworker.define (: MyOtherSuperworker, : comment_id) do Worker2: comment_id Worker3: comment_id end

Pentru a rula un super-lucrator, apelati perform_async:

MySuperworker.perform_async (23, 852)

Argumente

Puteti defini orice numar de argumente pentru super-lucrator si le puteti transmite diferitilor sub-lucratori dupa cum doriti:

Superworker.define (: MySuperworker,: user_id,: comment_id) do Worker1: user_id,: comment_id Worker2: comment_id Worker3: user_id end

Daca doriti sa setati argumente statice pentru sub-lucratori, puteti face acest lucru folosind orice valori care nu sunt simboluri (de exemplu siruri, numere intregi, etc):

Superworker.define (: MySuperworker,: user_id,: comment_id) do Worker1 100,: user_id,: comment_id Worker2 ‘all’ end

Daca un sub-lucrator nu ia niciun argument, va trebui sa includeti paranteze dupa acesta:

Superworker.define (: MySuperworker,: user_id,: comment_id) do Worker1: user_id,: comment_id Worker2 () end

Muncitori cu spatii de nume

Pentru a va referi la un lucrator cu spatiu de nume (de exemplu, MyModule :: Worker1), inlocuiti cele doua puncte cu doua puncte de subliniere:

Superworker.define (: MySuperworker,: user_id,: comment_id) face MyModule__Worker1: user_id,: comment_id end

Optiuni

Stergeti subiectii dupa finalizarea superlucrului

Atunci cand o superlucrare este pusa in coada, sunt create inregistrari pentru toti subiectii sai. In mod implicit, aceste inregistrari sunt sterse dupa finalizarea superlucrarii. Acest lucru poate fi modificat setand urmatoarea optiune la fals:

# config / initializers / superworker.rb Sidekiq :: Superworker.options [: delete_subjobs_after_superjob_completes] = false

Expirare superjob

Cand un subiect moare din cauza prea multor reincercari, lucrarile care depind de acesta nu vor rula niciodata si superlucrarea nu va fi niciodata finalizata. In consecinta, tastele Redis nu vor fi niciodata eliminate. Puteti seta superjob_expiration la N pentru a face ca tastele subjobs sa expire in N secunde. Valoarea implicita este zero (tastele nu vor expira niciodata).

# config / initializers / superworker.rb Sidekiq :: Superworker.options [: superjob_expiration] = 2592000 # 1 Month

Logare

Pentru a facilita depanarea, Sidekiq Superworker furnizeaza mesaje jurnal detaliate atunci cand jurnalul sau este setat la nivelul DEBUG:

# config / initializers / superworker.rb logger = Logger.new (Rails.root.join (‘log’, ‘superworker.log’)) logger.level = Logger :: DEBUG Sidekiq :: Superworker :: Logging.logger = logger

Monitorizarea

Utilizarea sidekiq_monitor cu Sidekiq Superworker este incurajata, deoarece va permite sa monitorizati cu usurinta cand ruleaza un superjob, cand a terminat, daca a intampinat erori si starea tuturor subiectilor sai.

Locuri de munca in lot

Utilizand un bloc de loturi, puteti crea loturi de subjoburi care sunt toate asociate cu superjob.

tias putas abuelas españolas follando
sexo guarro correte dentro
coños bonitos todoporno
megan montaner follando pajotes
peludas porno las mejores folladas
porno casero colombiano viejasxxx
se follan a su mujer españolas peludas
negras tetonas guarras.com
peliculas x vintage comicxxx
orgia porno español porno torrent
videos chicas gratis porno peludas
videos caseros españa madresxxx
españolas peludas pilladas playa
anal interacial videos xxxxx
tias corriendose sexo en directo
masturbacion en grupo madura tetona
el video porno mas visto en internet corriendose dentro
asiatica forzada mamadas de abuelas
presentadoras desnudas porno canario
videos sexo porno online gratis

Urmatoarele vor rula Worker1 si Worker2 in serie pentru fiecare ID de utilizator din matricea transmisa perform_async.

Superworker.define (: MyBatchSuperworker,: user_ids) face lot user_ids:: user_id face Worker1: user_id Worker2: user_id end end MyBatchSuperworker.perform_async ([30, 31, 32, 33, 34, 35])

De asemenea, puteti utiliza mai multe argumente:

Superworker.define (: MyBatchSuperworker,: user_ids,: comment_ids) face lot user_ids:: user_id, comment_ids:: comment_id do Worker1: user_id,: comment_id Worker2: user_id end end MyBatchSuperworker.perform_async ([10, 11, 12], [20 , 21, 22])

Cele de mai sus produc o secventa echivalenta cu aceasta (lucratorii ruleaza in serie):

Worker1.new.perform (10, 20) Worker2.new.perform (10) Worker1.new.perform (11, 21) Worker2.new.perform (11) Worker1.new.perform (12, 22) Worker2.new. efectua (12)

Gruparea lucrarilor in loturi va imbunatateste foarte mult capacitatea de a le audita si de a determina cand loturile au terminat.

Nume Superjob

Daca utilizati sidekiq_monitor si doriti sa setati un nume pentru un superjob, il puteti seta intr-un argument suplimentar, astfel:

# MySuperworker.perform_async fara nume (23) # Numit MySuperworker.perform_async (23, nume: „Numele postului meu”)

Erori

Daca un subjob intalneste o exceptie, subjob-urile care depind de acesta nu vor rula, dar restul subjob-urilor vor continua ca de obicei.

Daca se foloseste sidekiq_monitor, exceptia va fi ridicata la superjob, ceea ce va permite sa vedeti cu usurinta cand superjob-urile dvs. au esuat.

Note de actualizare

Actualizarea de la 1.0.x la 1.1.x in timp ce utilizati Sidekiq Monitor

Daca utilizati Sidekiq Monitor, ati folosit anterior Sidekiq Superworker 1.0.x si faceti upgrade la 1.1.x, ar trebui sa stiti ca strategia de stocare a ID-urilor de subiecti s-a schimbat. Inainte de a face upgrade, ar trebui sa lasati toti super-lucratorii sa termine, apoi sa efectuati upgrade, apoi sa reluati executarea super-lucratorilor. Pentru super-joburi care au functionat inainte de upgrade, relatia dintre superjobs si subjobs nu va mai fi afisata in unele parti ale interfetei de utilizare. Daca nu utilizati Sidekiq Monitor, puteti face upgrade fara nicio intrerupere.

Actualizarea de la 0.x la 1.x

Daca ati folosit anterior Sidekiq Superworker 0.x si faceti upgrade la 1.x, exista cateva modificari de care sa fiti constienti:

Redis a inlocuit ActiveRecord

ActiveRecord a fost folosit ca depozit de date in 0.x din cauza cerintelor specifice aplicatiei, dar Redis este o alegere mult mai buna din mai multe motive, mai ales avand in vedere ca Sidekiq foloseste Redis. Cand faceti upgrade la 1.x, va trebui sa lasati toate super-joburile dvs. finalizate, apoi sa faceti upgrade la 1.x, apoi sa reluati rularea superjob-urilor. Daca doriti, puteti renunta la tabelul „sidekiq_superworker_subjobs”.

Superworker.define a inlocuit Superworker.create

Numele metodei Superworker.create a provocat confuzie, deoarece unii utilizatori ar numi-o de mai multe ori. Deoarece defineste o clasa, a fost redenumita Superworker.define. Va trebui sa-l inlocuiti corespunzator.

Testarea

Sidekiq Superworker este testat impotriva mai multor seturi de dependente de bijuterii (in prezent: fara pietre pretioase, Rails 3 si Rails 4), asa ca va rugam sa efectuati testele cu Appraisal inainte de a trimite un PR. Multumiri!

Licenta

Sidekiq Superworker este lansat sub licenta MIT. Va rugam sa consultati fisierul MIT-LICENSE pentru detalii.