Veuillez considérer une classe comme suit:
class Foo:
def __init__(self, data):
self.data = data
def do_task(self):
#do something with data
Dans mon application, j'ai une liste contenant plusieurs instances de la classe Foo. Le but est d'exécuter do_task
pour tous les objets Foo. Une première implémentation est tout simplement:
#execute tasks of all Foo Object instantiated
for f_obj in my_foo_obj_list:
f_obj.do_task()
J'aimerais profiter d'une architecture multicœur partageant le cycle for
entre 4 CPU de ma machine.
Quelle est la meilleure façon de procéder?
Vous pouvez utiliser pools de processus dans le module de multitraitement.
def work(foo):
foo.do_task()
from multiprocessing import Pool
pool = Pool()
pool.map(work, my_foo_obj_list)
pool.close()
pool.join()
Au lieu de passer par toutes les bases du multithreading/multicœur, je voudrais faire référence à un article de Ryan W. Smith: Programmation multicœur et distribuée en Python
Il expliquera en détail comment vous pouvez utiliser plusieurs cœurs et utiliser ces concepts. Mais faites attention à ce genre de choses si vous n'êtes pas familier avec les concepts généraux du multithreading.
Programmation fonctionnelle vous permettra également de personnaliser l'algorithme/la fonction pour chaque cœur.