2012-02-16 7 views
6

Empiezo a aventurarme en el código distribuido y tengo problemas para descubrir qué solución se ajusta a mis necesidades en función de todas las cosas que hay. Básicamente tengo una lista de datos python que necesito procesar con una sola función. Esta función tiene algunos bucles anidados pero no tarda demasiado (aproximadamente un minuto) en cada elemento de la lista. Mi problema es que la lista es muy grande (más de 3000 elementos). Estoy mirando el multiprocesamiento, pero creo que quiero experimentar con el procesamiento de varios servidores (porque, idealmente, si los datos aumentan, quiero poder elegir agregar más servidores durante el trabajo para que funcione más rápido) .Sugerencias sobre la distribución de datos/código python sobre nodos de trabajador?

Yo, básicamente, en busca de algo que pueda distribuir esta lista de datos a través de (y no muy necesaria, pero sería bueno si pudiera distribuir mi base de código a través de esto también)

Así que mi pregunta es, ¿qué paquete puede Yo uso para lograr esto? Mi base de datos es hbase, así que ya tengo hadoop en ejecución (nunca usé hadoop, solo lo uso para la base de datos). Miré el apio y también se retorció, pero estoy confundido sobre cuál se ajustará a mis necesidades.

¿Alguna sugerencia?

Respuesta

4

Yo recomendaría celery. Se puede definir una tarea que opera en un solo elemento de la lista:

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

se puede paralelizar fácilmente una lista como esta:

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] 

Esto es fácilmente escalable con sólo añadir más trabajadores de apio.

2

echa un vistazo a rabbitMQ. Los enlaces de Python están disponibles a través del pika. comience con un simple work_queue y ejecute pocos rpc calls.

Puede parecer problemático experimentar computación distribuida en python con un motor externo como rabbitMQ (hay una pequeña curva de aprendizaje para instalar y configurar el conejo) pero puede que le resulte aún más útil más adelante.

... y el apio puede trabajar mano a mano con RabbitMQ, pago y envío robert pogorzelski's tutorial y Simple distributed tasks with Celery and RabbitMQ

Cuestiones relacionadas