Создание процесса в executor.map concurrent.futures - PullRequest
0 голосов
/ 30 сентября 2019

Я использую следующий код для многопроцессорной обработки с использованием модуля concurrent.futures:

with concurrent.futures.ProcessPoolExecutor(max_workers=4) as executor:
    var = executor.map(process, pdf_pages)

Теперь я параллельно создаю 4 процесса, если в моих итерируемых pdf_pages есть 4страниц и chunk_size = 1(default value), тогда каждая страница будет обрабатываться на отдельных 4 ядрах (мой компьютер имеет только 4 ядра), как я понимаю.

Что происходит, когда некоторые процессы завершаются за меньшее времяи я хочу знать, действительно ли для итератора pdf_pages, если он имеет 8 значений, следующие значения запускаются на executor.map мгновенно, или это происходит после того, как первые 4 значения на cpu cores завершаются первыми, т.е. , будут ли выполнены следующие 4 в очереди после завершения первого пакета из 4.

Кроме того, я хотел бы понять причину следующего:

ProcessPoolExecutorэтот метод разбивает итерируемые на несколько кусков, которые он представляет в пул как отдельные задачи. (Приблизительный) размер этих чанков можно указать, установив для чанксайза положительное целое число. Для очень длинных итераций использование большого значения для размера фрагмента может значительно повысить производительность по сравнению с размером по умолчанию, равным 1. При использовании ThreadPoolExecutor размер фрагмента не имеет значения.

Из документов Python.

Кроме того, как я могу ускорить обработку?

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