Рубрики
Без рубрики

Быстрый совет Python: Простой параллелизм потоков

Параллелизм не всегда прост, но, разбив наш код на форму, которая может быть применена к карте, вы можете легко настроить его для параллельного выполнения. Узнайте, как с помощью этого быстрого совета!

Автор оригинала: Lance Pioch.

Параллелизм не всегда прост, но, разбив наш код на форму, которая может быть применена к карте, мы можем легко настроить его для параллельного запуска!

Карта-это встроенная функция более высокого порядка, которая применяет заданную функцию к каждому элементу списка, возвращая список результатов.

Библиотека multiprocessing обычно используется для отдельных процессов, однако у нее есть аккуратный фиктивный модуль, который работает над потоками. На самом деле, это настолько тривиально, что вам нужно только установить количество потоков и дать ему свою функцию для отображения. Этот метод делает всю тяжелую работу за вас.

Не веришь мне? Проверьте это сами, давайте возведем в квадрат кучу чисел параллельно:

Пример кода

from multiprocessing.dummy import Pool as ThreadPool

def squareNumber(n):
    return n ** 2

# function to be mapped over
def calculateParallel(numbers, threads=2):
    pool = ThreadPool(threads)
    results = pool.map(squareNumber, numbers)
    pool.close()
    pool.join()
    return results

if __name__ == "__main__":
    numbers = [1, 2, 3, 4, 5]
    squaredNumbers = calculateParallel(numbers, 4)
    for n in squaredNumbers:
        print(n)
    

Количество потоков обычно будет эквивалентно количеству ядер, которые у вас есть. Если у вас есть гиперпоточность на вашем процессоре, вы сможете удвоить количество используемых потоков.

Возвращаемые результаты будут просто стандартным списком всех квадратных чисел в этом примере. Слишком просто, верно?