Как лучше всего сгруппировать элементы итератора в пакеты?Python

Программы на Python
Ответить
Anonymous
 Как лучше всего сгруппировать элементы итератора в пакеты?

Сообщение Anonymous »

Наша программа считывает результаты SQL-запроса и превращает каждую строку в задачу, которую должен выполнить работник. Что-то вроде:

Код: Выделить всё

for row in query.results():
cluster.submit(row)
Однако большинство задач выполняются настолько быстро, что затраты на обмен данными для каждой задачи снижают общую эффективность, и мне хотелось бы объединить N последовательных строк в одну задачу. Лучшее, что я могу придумать, это что-то вроде:

Код: Выделить всё

rows = []
for row in query.results():
rows.append(row)
if len(rows) == N:
cluster.submit(rows)
rows = []
if rows:    # Submit the last batch, if any
cluster.submit(rows)
Должен быть более pythonic способ сделать это - есть предложения?

Функция комментариев, кажется, исчезла, поэтому я отвечу на дополнительные вопросы здесь:
  • Вопрос: Изучали ли вы itertools.batched() в Python 3.12? Ответ: Я нет, нет... Наш Python по-прежнему версии 3.6 (Python на RHEL7 и RHEL8). Мне также было бы интересно, как это сделать - даже если itertools уже может это сделать.
  • Вопрос: Было бы полезно знать, что такое кластер Ответ: В данном случае это распределенный Python JobCluster - но мне все еще интересно узнать, как лучше всего превратить один длинный итератор в более короткий, состоящий из пакетов оригинала...


Подробнее здесь: https://stackoverflow.com/questions/798 ... to-batches
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»