2014-11-12 4 views
1

У меня есть генератор Python, который тянет в довольно огромную таблицу из хранилища данных. После ввода данных я обрабатываю данные с использованием сельдерея распределенным образом. После тестирования я понял, что генератор является узким местом. Он не может создать достаточные задачи для работы сельдерей. Это когда я решил оптимизировать свой генератор питона.Доступ к генераторам python параллельно с использованием модуля многопроцессорности

Более подробная информация о генераторе

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

Так что, если мой генератор Python генерирует нечеткие куски данных, это должно быть хорошим кандидатом для многопроцессорной обработки? Есть ли способы распараллеливать генераторы python? Также есть ли какие-либо побочные эффекты, которые я должен знать об использовании параллелизма в генераторах Python?

ответ

6

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

Например, если у вас есть 4 процесса, у вас есть первый процесс, обрабатывающий первый фрагмент, а затем он обрабатывает 5-й фрагмент, за которым следует 9-й кусок, и так далее, добавив N, где N - количество процессов, которые вы настроить. Это требует, чтобы вы передавали уникальный индекс каждому процессу при запуске.

Смежные вопросы