РЕДАКТИРОВАТЬ: старый ответ ниже, новый ответ вверху
Немного неэффективно ждать, пока будут выполнены первые 100 файлов, и только потом делать следующие (потому что вы могли бы начать обрабатывать следующие, пока у вас есть свободные рабочие, когда запущены последние файлы в пакете).
Тем не менее, если вы действительно хотите, чтобы обработка продолжалась до следующих 100 только после завершения первых 100, просто вызовите map
для пакета из 100 файлов за раз.
files = sorted(...)
for i in range(0, len(files), 100):
pool.map(files[i:i+100])
В зависимости от того, сколько у вас работников, я предлагаю увеличить размер партии более чем на 100, чтобы сократить время, в течение которого вы работаете без дела (как описано выше).
Предполагая, что вам просто нужны группы из 100 последовательных файлов, но не обязательно с самого начала, вы можете попробовать следующее.
По предложенной математике я бы сказал, что вы можете разделить файлы на группы по 100, а затем обработать каждую группу в отдельном работнике. последовательные файлы обрабатываются).
files = sorted(...)
file_groups = [[files[i + j] for j in range(min(100, len(files) - i))]
for i in range(0, len(files), 100]
def process_batch(batch):
group_index, group_files = batch
for f in group_files:
process_file(f)
print('Group %d is done' % group_index)
pool.map(process_batch, enumerate(file_groups))
Предполагая, что вы просто хотите группы из 100 последовательных файлов, но не обязательно с самого начала, вы можете попробовать следующее.
В соответствии с предложенной математикой я бы сказал, что вы можете разделить файлы на группы по 100, а затем обработать каждую группу в отдельном работнике. последовательные файлы обрабатываются).
files = sorted(...)
file_groups = [[files[i + j] for j in range(min(100, len(files) - i))]
for i in range(0, len(files), 100]
def process_batch(batch):
group_index, group_files = batch
for f in group_files:
process_file(f)
print('Group %d is done' % group_index)
pool.map(process_batch, enumerate(file_groups))