supraveghetor este o coadă de simplu distribuită proiectat pentru manipularea număr mare de sarcini unice.
Am construit acest lucru la Disqus să se ocupe de frecvente, dar mai puțin frecvente sarcini, cum ar fi "migra aceste date într-o nouă schemă".
De ce?
S-ar putea întreba: "De ce nu folosiți Țelină?". Ei bine, răspunsul este pur și simplu faptul că de așteptare normală necesită (nu literal, dar că ar fi dureros fără) sa tampon toate sarcinile într-o locație centrală. Acest lucru devine o problemă atunci când aveți o cantitate mare de sarcini, mai ales atunci când acestea conțin o cantitate mare de date.
Imaginați-vă că aveți 1 miliard de sarcini, fiecare în greutate de la 5k. Asta, necomprimate, la minim 4 terabiti de stocare necesare doar pentru a ține că în jurul, și tu câștigă foarte puțin.
Supraveghetor pe de altă parte, este conceput pentru a lua o iterator resumable, și trage doar într-un număr maxim de locuri de muncă la un moment dat (folosind standardul Python coadă lui). Acest lucru asigură un model de memorie consistent, care poate scala liniar.
Utilizare
Creați un iterator, și callback:
soclu import
# Trebuie să ne asigurăm de expirare implicit ** nu este setat ** sau rahat întâmplare va lovi ventilatorul.
socket.setdefaulttimeout (Niciuna)
# Supraveghetor / example.py
get_jobs definiție (ultimul = 0):
& Nbsp; # ultimul va fi trimis dacă stat a fost reluată
& Nbsp; # de la o centrare anterior
& Nbsp; for i in xrange (ultimul, 100000000):
& Nbsp; # de locuri de muncă trebuie să fie dat serializeable cu zeama
& Nbsp; randament i
def handle_job (i):
& Nbsp; # aceasta ** ** trebuie să fie idempotent, ca reluarea procesului poate executa un loc de muncă
& Nbsp; # care au fost deja executați
& Nbsp; de imprimare "Got% r!" % I
Ruleze un maestru:
& Nbsp; tm-maestru taskmaster.example
Ruleze un sclav:
& Nbsp; tm-sclav taskmaster.example
Sau da naștere 8 sclavi (fiecare conținând un threadpool):
& Nbsp; tm-icre taskmaster.example 8
Dont ca funcția magică a descoperi de master / slave? Precizați propriile obiective:
& Nbsp; tm-maestru taskmaster.example: get_jobs $ TM-slave taskmaster.example: handle_job
Notă: Toate argumentele sunt opționale, și va implicit la localhost cu nici o cheie de autentificare
Cerințe :.
- Python
Comentariile nu a fost găsit