Пределы многопроцессорной обработки Python.Pool - PullRequest
2 голосов
/ 26 февраля 2012

Я запускаю много времени программу. У меня есть шанс получить доступ к кластеру, где мне могут потребоваться 504 процессора, но обслуживание клиентов, скажем, медленное, поэтому я обращаюсь к вам ТАК. Я использую очень простое приложение следующим образом:

import multiprocessing

def function(data):
    data = complicated_function_I_was_given(data)
    with open('unique_id', 'w') as f:
        f.write(data)

pool = multiprocessing.Pool(504)
pool.map(function, data_iterator)

Теперь, несмотря на то, что я вижу начало процессов ('complex_function_I_was_given' записывает кучу записок, но с уникальными именами, так что я уверен, что нет столкновения), процесс кажется очень медленным. Я ожидаю, что некоторые data в data_iterator будут обработаны немедленно, хотя некоторые займут дни, но после 1 дня ничего не было произведено. Может ли быть так, что у multiprocessing.Pool () есть предел? Или что он не распределяет процессы по разным узлам (я знаю, что каждый узел имеет 12 ядер)? И я использую python2.6.5.

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

Или что он не распределяет процессы по разным узлам (я знаю, что каждый узел имеет 12 ядер)?И я использую python2.6.5.

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

См. Также ответы на этот вопрос .

1 голос
/ 26 февраля 2012

Вы можете попробовать масштабировать работу с одной из многих параллельных библиотек Python , я не слышал о масштабировании работы на стольких процессорах с помощью просто многопроцессорной обработки.

...