2010-01-12 3 views
5

Python sembra avere many different packages available per assistere una elaborazione parallela su un sistema basato su SMP o attraverso un cluster. Sono interessato alla creazione di un sistema client server in cui un server mantiene una coda di lavori e client (locali o remoti) connettersi ed eseguire i lavori fino a quando la coda è vuota. Dei pacchetti sopra elencati, che è raccomandato e perché?Librerie di elaborazione parallela Python

Modifica: In particolare, ho scritto un simulatore che accetta pochi input e elabora le cose per un po '. Ho bisogno di raccogliere abbastanza campioni dalla simulazione per stimare una media entro un intervallo di confidenza specificato dall'utente. Per velocizzare le cose, voglio essere in grado di eseguire simulazioni su molti sistemi diversi, ognuno dei quali riporta al server a un certo intervallo con gli esempi che hanno raccolto. Il server calcola quindi l'intervallo di confidenza e determina se il processo client deve continuare. Dopo aver raccolto un numero sufficiente di campioni, il server termina tutte le simulazioni client, riconfigura la simulazione in base ai risultati passati e ripete i processi.

Con questa necessità di intercomunicazione tra i processi client e server, mi chiedo se la schedulazione batch sia una soluzione praticabile. Scusa avrei dovuto essere più chiaro all'inizio.

+0

sembra che tu stia cercando uno scheduler? –

risposta

2

avere un andare con ParallelPython. Sembra facile da usare e dovrebbe fornire l'interfaccia di lavori e code che si desidera.

0

Dato che hai contrassegnato la tua domanda "scientifico-computing", e la menzione di un cluster, un qualche tipo di MPI involucro sembra la scelta più ovvia, se l'obiettivo è quello di sviluppare applicazioni parallele come si potrebbe intuire dal titolo. Quindi, di nuovo, il testo nella tua domanda suggerisce di voler sviluppare un pianificatore di batch. Quindi non so davvero quale domanda stai chiedendo.

+0

Non ci sarebbe alcuna interazione tra i processi client, ma la coda/server cambierebbe in base ai singoli risultati del processo client. Devo solo essere in grado di gestire un sacco di lavori dinamicamente su molte workstation. –

+0

Oh. In tal caso, la maggior parte delle persone ha script per l'invio di molti lavori a un programma di pianificazione batch esistente come condor o SLURM, analizza l'output e, se necessario, invia nuovi lavori, ecc. Lo sforzo è molto inferiore rispetto alla scrittura di uno schedulatore personalizzato. – janneb

0

Il modo più semplice per eseguire questa operazione è probabilmente quello di restituire i campioni intermedi ai file separati (o al database) al termine e fare in modo che un processo esegua occasionalmente il polling di questi file di output per vedere se sono sufficienti o se più lavori devono essere presentati

1

Ci sono anche oggi due diversi involucri Python intorno alla mappa/ridurre quadro Hadoop:

http://code.google.com/p/happy/

http://wiki.github.com/klbostee/dumbo

Map/Reduce è un modello di sviluppo bello con un sacco di ricette per la soluzione di modelli comuni di problemi.

Se non si dispone già di un cluster, Hadoop in sé è bello perché ha completa pianificazione dei processi, la distribuzione automatica dei dati dei dati nel cluster (cioè HDFS), ecc