Tugtemester er simpelt fordelt kø designet til at håndtere et stort antal enkeltstående opgaver.
Vi byggede dette på Disqus til at håndtere hyppige, men ualmindelige opgaver som "migrere disse data til en ny skema".
Hvorfor?
Du kan spørge, "Hvorfor ikke bruge Selleri?«. Jo, svaret er ganske enkelt, at den normale kø kræver (ikke bogstaveligt, men det ville være smertefuldt uden) du til buffer alle opgaver i en central placering. Dette bliver et problem, når man har en stor mængde af opgaver, især når de indeholder en stor mængde data.
Forestil dig at du har 1 milliard opgaver, hver en vægt på 5 k. Thats, ukomprimeret, på minimum 4 terabyte storage krævede bare for at holde det omkring, og får du meget lidt.
Tugtemester på den anden side er designet til at tage en resumable iterator, og kun trække i et maksimalt antal arbejdspladser på et tidspunkt (ved hjælp af standard Python Queue s). Dette sikrer en ensartet hukommelse mønster, der kan skaleres lineært.
Anvendelse
Opret en iterator, og tilbagekald:
import socket
# Vi skal sikre standard timeout ** er ikke indstillet ** eller tilfældig lort vil ramme fan.
socket.setdefaulttimeout (Ingen)
# Tugtemester / example.py
def get_jobs (sidste = 0):
& Nbsp; # sidste ville blive sendt, hvis staten blev genoptaget
& Nbsp; # fra en tidligere kørsel
& Nbsp; for jeg i xrange (sidste, 100000000):
& Nbsp; # jobs gav skal være serializeable med lage
& Nbsp; udbytte i
def handle_job (I):
& Nbsp; # dette ** must ** blive idempotent, som genoptage processen kan udføre et job
& Nbsp; #, der allerede var kørt
& Nbsp; print "Got% r!" % I
Gyde en mester:
& Nbsp; tm-mester taskmaster.example
Gyde en slave:
& Nbsp; tm-slave taskmaster.example
Eller gyde 8 slaver (hver indeholdende en ThreadPool):
& Nbsp; tm-spawn taskmaster.example 8
Dont ligesom magiske funktion opdage for master / slave? Angiv dine egne mål:
& Nbsp; tm-mester taskmaster.example: get_jobs $ tm-slave taskmaster.example: handle_job
Bemærk: Alle argumenter er valgfri, og vil som standard til localhost uden auth tast
Krav :.
- Python
Kommentarer ikke fundet