2012-02-16 14 views
6

Zaczynam wchodzić w kod rozproszony i mam problem z ustaleniem, które rozwiązanie pasuje do moich potrzeb w oparciu o wszystkie te rzeczy. Zasadniczo mam listę danych Pythona, które muszę przetwarzać za pomocą jednej funkcji. Ta funkcja ma kilka zagnieżdżonych pętli, ale nie zajmuje zbyt długo (około minuty) dla każdego elementu na liście. Mój problem polega na tym, że lista jest bardzo duża (ponad 3000 pozycji). Patrzę na proces wieloprocesowy, ale myślę, że chcę eksperymentować z przetwarzaniem na wielu serwerach (ponieważ najlepiej, jeśli dane stają się większe, chcę mieć możliwość dodawania kolejnych serwerów podczas pracy, aby działało szybciej) .Sugestie dotyczące dystrybucji danych/kodu Pythona przez węzły robocze?

I w zasadzie patrząc na coś, co mogę dystrybuować tej listy danych poprzez (i nie bardzo potrzebne, ale byłoby miło, gdybym mógł rozprowadzać mój kod bazowy przez to również)

Więc moje pytanie jest, co Pakiet Używam do osiągnięcia tego? Moja baza danych to hbase, więc już mam hadoop uruchomiony (nigdy nie użyłem hadoop, tylko używając go do bazy danych). Spojrzałem też na selera i zakręciłem się, ale jestem zdezorientowany, co pasuje do moich potrzeb.

Wszelkie sugestie?

Odpowiedz

4

Gorąco polecam celery. Można zdefiniować zadania, które działa na jednej pozycji z listy:

from celery.task import task 
@task 
def process(i): 
    # do something with i 
    i += 1 
    # return a result 
    return i 

można łatwo parallelize listę takiego:

results = [] 
todo = [1,2,3,4,5] 
for arg in todo: 
    res = process.apply_async(args=(arg)) 
    results.append(res) 

all_results = [res.get() for res in results] 

to łatwo skalowalna po prostu dodając więcej pracowników selera.

2

wyewidencjonowanie rabbitMQ. Powiązania Python są dostępne przez pika. zacznij od prostego work_queue i uruchom kilka rpc calls.

Może wydawać się kłopotliwe eksperymentowanie z rozproszonym przetwarzaniem w pythonie za pomocą zewnętrznego silnika takiego jak rabbitMQ (istnieje niewielka krzywa uczenia się do instalacji i konfiguracji królika), ale może się okazać, że będzie on jeszcze bardziej przydatny w późniejszym czasie.

... i seler może pracować ręka w rękę z RabbitMQ, kasie robert pogorzelski's tutorial i Simple distributed tasks with Celery and RabbitMQ

Powiązane problemy