Многопроцессорность Python с imap и tqdm: параллельная обработка стала проще

Когда дело доходит до параллельной обработки в Python, модуль многопроцессорности является мощным инструментом. Он позволяет одновременно выполнять несколько задач, используя преимущества нескольких ядер ЦП. Функция imap— это метод, предоставляемый модулем multiprocessing, который обеспечивает параллельную обработку итерируемых объектов. Она похожа на встроенную функцию map, но выполняет операцию карты параллельно.

Чтобы обеспечить индикатор выполнения и визуализацию параллельной обработки, вы можете подключить библиотеку tqdm. tqdm — популярная библиотека Python для добавления индикаторов выполнения в циклы и итераторы, включая задачи многопроцессорной обработки. Интегрируя tqdm с функциями многопроцессорной обработки и imap, вы можете отслеживать ход выполнения параллельных задач и получать ценную информацию об их выполнении.

Вот несколько способов объединить многопроцессорность, imap и tqdm в Python:

Метод 1: использование imapиз multiprocessing.Poolс tqdm

from multiprocessing import Pool
from tqdm import tqdm
def process_function(item):
    # Define your processing logic here
    return result
if __name__ == '__main__':
    pool = Pool()
    iterable = [...]  # Your iterable object
    results = list(tqdm(pool.imap(process_function, iterable), total=len(iterable)))

Метод 2: использование concurrent.futures.ProcessPoolExecutorс tqdm

from concurrent.futures import ProcessPoolExecutor
from tqdm import tqdm
def process_function(item):
    # Define your processing logic here
    return result
if __name__ == '__main__':
    executor = ProcessPoolExecutor()
    iterable = [...]  # Your iterable object
    results = []
    with tqdm(total=len(iterable)) as pbar:
        futures = [executor.submit(process_function, item) for item in iterable]
        for future in futures:
            results.append(future.result())
            pbar.update(1)

Метод 3: использование joblib.Parallelс tqdm

from joblib import Parallel, delayed
from tqdm import tqdm
def process_function(item):
    # Define your processing logic here
    return result
if __name__ == '__main__':
    iterable = [...]  # Your iterable object
    num_cores = ...  # Number of CPU cores to use
    results = Parallel(n_jobs=num_cores)(delayed(process_function)(item) for item in tqdm(iterable))