leermeester is een eenvoudige gedistribueerde wachtrij ontworpen voor het verwerken van grote aantallen eenmalige taken.
We bouwden deze bij Disqus frequent te hanteren, maar ongewoon taken zoals "migreren deze gegevens naar een nieuw schema".
Waarom?
Je zou kunnen vragen: "Waarom geen gebruik maken van Selderij?". Wel, het antwoord is simpelweg dat de normale wachtrijen vereist (niet letterlijk, maar het zou pijnlijk zonder zijn) kunt u alle taken buffer in een centrale locatie. Dit wordt een probleem bij een groot aantal taken, vooral wanneer zij een grote hoeveelheid gegevens.
Stel je hebt 1 miljard taken, elk met een gewicht van 5k. Dat is, niet-gecomprimeerde, minimaal 4 terabytes aan opslag nodig alleen maar om dat rond te houden, en krijgt u heel weinig.
Opzichter aan de andere kant is ontworpen om een hervattend iterator te nemen, en alleen trek in een maximum aantal taken tegelijk (met behulp van standaard Python Queue's). Dit zorgt voor een constante herinnering patroon dat lineair kan schalen.
Gebruik
Maak een iterator, en terugbellen:
import socket
# We moeten ervoor zorgen standaard timeout ** is niet ingesteld ** of willekeurige stront de ventilator raken.
socket.setdefaulttimeout (Geen)
# Leermeester / example.py
def get_jobs (laatste = 0):
& Nbsp; # laatste zou worden verzonden als staat werd hervat
& Nbsp; # uit een vorige run
& Nbsp; voor i in xrange (laatste, 100000000):
& Nbsp; # banen opgeleverd moet serializeable met augurk zijn
& Nbsp; opbrengst i
def handle_job (i):
& Nbsp; # deze ** must ** worden idempotent, als u het proces hervat kan een job uit te voeren
& Nbsp; # dat was al lopen
& Nbsp; print "Got% r!" % I
Paaien een meester:
& Nbsp; tm-meester taskmaster.example
Paaien een slaaf:
& Nbsp; tm-slave taskmaster.example
Of paaien 8 slaven (elk een ThreadPool):
& Nbsp; tm-spawn taskmaster.example 8
Dont zoals de magische functie te ontdekken voor master / slave? Geef aan uw eigen doelstellingen:
& Nbsp; tm-meester taskmaster.example: get_jobs $ tm-slave taskmaster.example: handle_job
Opmerking: Alle argumenten zijn optioneel, en wordt standaard localhost zonder auth key
Eisen .
- Python
Reacties niet gevonden