Как сделать неравномерную параллельную обработку в python? - PullRequest
0 голосов
/ 29 февраля 2020

Существует ли эффективный способ выполнения неравномерной параллельной обработки в python, т.е. когда имеет значение, какой параллельный процесс / поток используется для обработки каждой входной записи?

Пример:
Существует одна очередь сообщений, которая создает кортежи (x,n), где x - это какой-то тип данных, а n - это какой-то индикатор того, какой параллельный процесс / поток подходит для обработки таких данных. Объекты обработки данных поддерживают некоторое состояние, и поэтому можно не просто передать данные какому-либо параллельному процессу, а только передать их процессу, который обрабатывал данные того же типа в прошлый раз.

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

1 Ответ

0 голосов
/ 29 февраля 2020

вы можете использовать asyncio библиотеку для выполнения sh неравномерного выполнения, но концепция параллельного программирования в языках программирования высокого уровня отличается от описанной в таких языках, как c, c ++. Ваш подход к проблеме должен состоять в том, чтобы хранить данные в одной и той же очереди, а не в подпочве. должна существовать стратегия / адаптер реализация шаблона проектирования для распределения данных по службам адаптивной обработки данных, насколько это возможно в библиотеке asyncio. если вы придерживаетесь этого подхода, вам следует рассмотреть возможность реализации своей очереди как безопасной для потоков. это может быть как в native python library или расширении с вашими функциональными требованиями.

Оставшаяся часть проблемы выглядит как реализация его как производитель-потребитель с асинхронными сопрограммами

если в наборе задач используются большие данные, вы можете также рассмотреть возможность внедрения серверной части обработки данных в apache spark

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...