Работа с многопоточностью

Как выбрать количество пулов

CPU-based и I/O-based операции: https://stackoverflow.com/a/41780357

Если работаем с сетью, то можно выбрать побольше: 20, 40, 100

Если с файловой системой, то так не сработает, мы только забьем ресурсы и будет еще медленнее работать. Оптимально выбрать количество ядер помноженное на 2.

multithreading

Многопоточное выполнение над локальными процессами (например, над файловой системой)

Пример:

import os
import itertools
# Глубоко под копотом Pool из threading то же самое, что и Pool из multiprocessing.pool
from multiprocessing.dummy import Pool as ThreadPool

pool = ThreadPool(os.cpu_count() * 2)
results_iterator = pool.imap_unordered(do_something, some_iterator)
pool.close()

multiprocessing

Про multiprocessing кратко: http://python-3.ru/page/multiprocessing

Логика, стоящая за выбором chunksize: https://stackoverflow.com/questions/53751050/multiprocessing-understanding-logic-behind-chunksize

Пример: по задумке — это брут чего-то

Timer

Выполняем задачу периодически, пока не вернется нужный результат:

Last updated