αφεντικό είναι μια απλή επιμεριστική ουρά σχεδιαστεί για να χειρίζεται μεγάλο αριθμό εφάπαξ καθήκοντα.
Χτίσαμε αυτό στο DISQUS να χειριστεί συχνές, αλλά όχι συχνές εργασίες όπως «μεταναστεύουν αυτά τα δεδομένα σε ένα νέο σχήμα».
Γιατί;
Μπορείτε να ρωτήσετε, "Γιατί να μην χρησιμοποιήσουμε Σέλινο;». Λοιπόν η απάντηση είναι απλά ότι η κανονική αναμονή απαιτεί (όχι κυριολεκτικά, αλλά θα ήθελα να είναι επώδυνη χωρίς) μπορείτε να αμβλυνθούν όλα τα καθήκοντα σε μια κεντρική τοποθεσία. Αυτό γίνεται ένα πρόβλημα όταν έχετε ένα μεγάλο ποσό των καθηκόντων, ιδίως όταν αυτά περιέχουν μεγάλη ποσότητα δεδομένων.
Φανταστείτε έχετε 1 δισ καθήκοντα, το καθένα ζυγίζει σε 5k. Αυτός, ασυμπίεστο, τουλάχιστον 4 terabytes αποθήκευσης που απαιτείται μόνο για να κρατήσει ότι γύρω, και σας κερδίζει πολύ λίγο.
Εργοδηγός από την άλλη πλευρά έχει σχεδιαστεί για να λάβει μια αναληπτέος iterator, και τραβήξτε μόνο σε ένα μέγιστο αριθμό θέσεων εργασίας σε έναν χρόνο (με τη χρήση τυποποιημένων Python ουρά του). Αυτό εξασφαλίζει ένα σταθερό μοτίβο της μνήμης που μπορεί να επεκταθεί γραμμικά.
Χρήση
Δημιουργήστε ένα iterator, και επανάκλησης:
υποδοχή εισαγωγής
# Πρέπει να διασφαλίσουμε προεπιλεγμένο χρονικό όριο ** Δεν έχει οριστεί ** ή τυχαία σκατά θα χτυπήσει τον ανεμιστήρα.
socket.setdefaulttimeout (Καμία)
# Επιστάτη / example.py
get_jobs def (τελευταίο = 0):
& Nbsp? # Τελευταία θα πρέπει να σταλεί αν η κατάσταση αυτή συνεχίζεται
& Nbsp? # Από μια προηγούμενη εκτέλεση
& Nbsp? For i in xrange (τελευταία, 100000000):
& Nbsp? # Θέσεις εργασίας απέδωσε πρέπει να serializeable με τουρσί
& Nbsp? Απόδοση θ
def handle_job (i):
& Nbsp? # Αυτό ** ** must να idempotent, όπως συνεχιστεί η διαδικασία μπορεί να εκτελέσει μια εργασία
& Nbsp? # Που είχε ήδη τρέξει
& Nbsp? Εκτύπωσης "Got% R!" % I
Γεννούν ένα master:
& Nbsp? TM-master taskmaster.example
Στόχο την αναπαραγωγή ενός σκλάβου:
& Nbsp? TM-σκλάβων taskmaster.example
Ή αναπαράγονται 8 δούλοι (το καθένα περιέχει ένα threadpool):
& Nbsp? TM-γόνου taskmaster.example 8
Αρέσει το μαγικό λειτουργία ανακαλύψετε master / slave; Καθορίστε τους δικούς σας στόχους:
& Nbsp? TM-master taskmaster.example: get_jobs $ TM-σκλάβων taskmaster.example: handle_job
Σημείωση: Όλα τα επιχειρήματα είναι προαιρετική, και θα προκαθορίσει localhost χωρίς κλειδί auth
Απαιτήσεις :.
- Python
Τα σχόλια δεν βρέθηκε