шаблон для нескольких рабочих сценариев для обработки списка данных - PullRequest
0 голосов
/ 03 ноября 2010

Скажем, у меня есть список из 10000 строк, которые должны быть обработаны 100 рабочими сценариями.

Я бы хотел, чтобы как можно больше синхронных сценариев выполнялось как можно больше.

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

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

Рабочий сценарий в любое время может быть недоступен в течение неизвестного периода времени.

Теперь предположим, что из первых 100 рабочих сценариев любой данный рабочий сценарий может стать недоступным (либо потерпеть крах, либо занять слишком много времени с текущими данными), но через некоторое время станет доступным снова. Он может снова стать недоступным и может занять слишком много времени, чтобы снова стать доступным для обработки 10000 строк.

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

Я мог бы представить что-то вроде выполнения цикла для всех 10 000 строк и другого сценария для опроса всех доступных рабочих через определенные промежутки времени и синхронного запуска этих рабочих.

Я не уверен, как бы я подошел к этой проблеме.

1 Ответ

1 голос
/ 03 ноября 2010

Шаблон производителя / потребителя очень полезен для подобных ситуаций.Я объяснил это немного более здесь .

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

Кроме того, я предполагаю, что вы не ожидаете увидеть ускорение в 100 раз, поскольку ваше HW наверняка не поддержит это ...

Конечно, если я полностью не понял, и вы действительно хотите обработать каждую строку100x (т. Е. Каждый сценарий делает что-то свое), пожалуйста, уточните.

...