Ответ 1
Вы можете использовать пулы процессов в модуле многопроцессорности.
def work(foo):
foo.do_task()
from multiprocessing import Pool
pool = Pool()
pool.map(work, my_foo_obj_list)
pool.close()
pool.join()
Пожалуйста, рассмотрите класс следующим образом:
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
между четырьмя процессорами моей машины.
Какой лучший способ сделать это?
Вы можете использовать пулы процессов в модуле многопроцессорности.
def work(foo):
foo.do_task()
from multiprocessing import Pool
pool = Pool()
pool.map(work, my_foo_obj_list)
pool.close()
pool.join()
Вместо того, чтобы проходить через все многопоточные/многоядерные основы, я хотел бы ссылаться на сообщение Райана У. Смита: многоядерное и распределенное программирование в Python
Он подробно рассмотрит, как вы можете использовать несколько ядер и использовать эти концепции. Но, пожалуйста, будьте осторожны с этим, если вы не знакомы с общими понятиями многопоточности.
Функциональное программирование также позволит вам настроить алгоритм/функцию для каждого ядра.