Многоячеечное программирование на Python

Пожалуйста, рассмотрите класс следующим образом:

class Foo:
    def __init__(self, data):
        self.data = data

    def do_task(self):
        #do something with data 

В моем приложении у меня есть список, содержащий несколько экземпляров класса Foo. Цель состоит в том, чтобы выполнить do_task для всех объектов Foo. Первая реализация проста:

 #execute tasks of all Foo Object instantiated
 for f_obj in my_foo_obj_list:
     f_obj.do_task()

Я бы хотел использовать многоядерную архитектуру, разделяющую цикл for между четырьмя процессорами моей машины.

Какой лучший способ сделать это?

Ответ 1

Вы можете использовать пулы процессов в модуле многопроцессорности.

def work(foo):
    foo.do_task()

from multiprocessing import Pool

pool = Pool()
pool.map(work, my_foo_obj_list)
pool.close()
pool.join()

Ответ 2

Вместо того, чтобы проходить через все многопоточные/многоядерные основы, я хотел бы ссылаться на сообщение Райана У. Смита: многоядерное и распределенное программирование в Python

Он подробно рассмотрит, как вы можете использовать несколько ядер и использовать эти концепции. Но, пожалуйста, будьте осторожны с этим, если вы не знакомы с общими понятиями многопоточности.

Функциональное программирование также позволит вам настроить алгоритм/функцию для каждого ядра.