Предложения по распределению данных / кода Python по рабочим узлам? - PullRequest
6 голосов
/ 17 февраля 2012

Я начинаю рисковать в распределенном коде и испытываю затруднения с выяснением, какое решение соответствует моим потребностям, основываясь на всем этом. По сути, у меня есть список данных Python, которые мне нужно обработать с помощью одной функции. Эта функция имеет несколько вложенных циклов, но не занимает слишком много времени (около минуты) для каждого элемента в списке. Моя проблема в том, что список очень большой (более 3000 наименований). Я смотрю на многопроцессорность, но думаю, что хочу поэкспериментировать с многосерверной обработкой (потому что в идеале, если данные становятся больше, я хочу иметь возможность добавить больше серверов во время выполнения задания, чтобы ускорить его выполнение) ,

Я в основном искал что-то, через что я мог бы распространять этот список данных (и не супер, но было бы неплохо, если бы я мог также распространять свою базу кода)

Итак, мой вопрос: какой пакет я могу использовать для достижения этой цели? Моя база данных - hbase, поэтому у меня уже есть hasoop (хотя я никогда не использовал hadoop, просто использую его для базы данных). Я смотрел на сельдерей и тоже крутил, но я не уверен, что подойдет под мои нужды.

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 17 февраля 2012

Я очень рекомендую сельдерей . Вы можете определить задачу, которая работает с одним элементом вашего списка:

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

Вы можете легко распараллелить список следующим образом:

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]

Это легко масштабируется, просто добавляя больше работников из сельдерея.

2 голосов
/ 17 февраля 2012

проверить rabbitMQ .Привязки Python доступны через pika .начать с простого work_queue и выполнить несколько вызовов rpc .

Эксперимент по распределенным вычислениям в python может показаться проблематичным с внешним механизмом, например rabbitMQкривая для установки и настройки кролика), но вы можете найти его еще более полезным позже.

... и сельдерей могут работать рука об руку с rabbitMQ, оформить заказ учебник Роберта Погорзельского Простые распределенные задачи с Celery и RabbitMQ

...