uppdragsgivare är fördelad enkel kö konstruerad för att hantera stora mängder engångsuppgifter.
Vi byggde detta på DISQUS att hantera frekventa, men ovanliga uppgifter som att "migrera dessa data till ett nytt schema".
Varför?
Du kanske undrar: "Varför inte använda Selleri?". Jo svaret är helt enkelt att normal köande kräver (inte bokstavligt, men det skulle vara smärtsamt utan) du att buffra alla uppgifter i en central plats. Detta blir ett problem när du har en stor mängd uppgifter, särskilt när de innehåller en stor mängd data.
Tänk dig att du har 1 miljard uppgifter, var och väger in på 5k. Thats, okomprimerad, vid minst 4 terabyte lagring krävs bara för att hålla det runt, och får dig väldigt lite.
Taskmaster däremot är utformad för att ta ett resumable iterator, och endast dra in ett maximalt antal arbetstillfällen i taget (med standard Python Queue s). Detta säkerställer en konsekvent minnesmönster som kan skala linjärt.
Användning
Skapa en iterator, och återuppringning:
import socket
# Vi måste se till standard timeout ** är inte satt ** eller slumpmässig skit kommer att drabba fläkten.
socket.setdefaulttimeout (Ingen)
# Uppdragsgivare / example.py
def get_jobs (förra = 0):
& Nbsp; # förra skulle skickas om statligt återupptogs
& Nbsp; # från en tidigare körning
& Nbsp; for i in xrange (sist, 100000000):
& Nbsp; # jobb gav måste vara serializeable med ättikslag
& Nbsp; avkastning i
def handle_job (i):
& Nbsp; # här ** måste ** vara idempotent, så återuppta processen kan utföra ett jobb
& Nbsp; # som redan körts
& Nbsp; print "Got% r!" % I
Spawn en mästare:
& Nbsp; tm-master taskmaster.example
Leka en slav:
& Nbsp; tm-slav taskmaster.example
Eller leka åtta slavar (var och en innehåller en threadpool):
& Nbsp; tm-spawn taskmaster.example 8
Gillar inte den magiska funktionen upptäcka för master / slave? Ange dina egna mål:
& Nbsp; tm-master taskmaster.example: get_jobs $ tm-slav taskmaster.example: handle_job
Obs: Alla argument är valfria, och återgår till localhost utan auth nyckel
Krav :.
- Python
Kommentarer hittades inte