2012-02-16 8 views
6

Sto iniziando ad avventurarmi in codice distribuito e sto avendo problemi a capire quale soluzione si adatta alle mie esigenze in base a tutte le cose là fuori. Fondamentalmente ho una lista python di dati che ho bisogno di elaborare con una singola funzione. Questa funzione ha alcuni cicli annidati ma non richiede troppo tempo (circa un minuto) per ciascun elemento nell'elenco. Il mio problema è che la lista è molto grande (3000+ articoli). Sto osservando il multiprocessing ma penso di voler sperimentare con il multi-server che lo elabora (perché idealmente, se i dati diventano più grandi, voglio essere in grado di avere la possibilità di aggiungere più server durante il lavoro per renderlo più veloce) .Suggerimenti sulla distribuzione di dati/codice Python su nodi worker?

Io fondamentalmente alla ricerca di qualcosa che posso distribuire questo elenco di dati attraverso (e non super necessaria ma sarebbe bello se potessi distribuire il mio codice di base attraverso questo anche)

Quindi la mia domanda è, quale pacchetto può Io uso per ottenere questo? Il mio database è hbase, quindi ho già eseguito hasdoop (mai usato hadoop, ma lo uso solo per il database). Ho guardato il sedano e contorto, ma sono confuso su cui si adatta alle mie esigenze.

Qualche suggerimento?

risposta

4

Mi raccomando celery. È possibile definire un compito che opera su un singolo elemento della vostra lista:

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

Si può facilmente parallelizzare una lista come questa:

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] 

Questo è facilmente scalabile semplicemente aggiungendo più lavoratori di sedano.

2

check out rabbitMQ. I collegamenti Python sono disponibili tramite pika. iniziare con un semplice work_queue ed eseguire alcuni rpc calls.

Può sembrare problematico sperimentare il calcolo distribuito in python con un motore esterno come rabbitMQ (c'è una piccola curva di apprendimento per l'installazione e la configurazione del coniglio) ma potrebbe essere ancora più utile in seguito.

... e il sedano in grado di lavorare mano nella mano con RabbitMQ, cassa robert pogorzelski's tutorial e Simple distributed tasks with Celery and RabbitMQ