Multitraitement d'une boucle for?
J'ai un tableau (appelé data_inputs
) contenant les noms de centaines d'astronomie des fichiers d'images. Ces images sont ensuite manipulées. Mon code fonctionne et ne prend que quelques secondes à chaque image. Toutefois, il ne peut le faire une image à la fois parce que je suis l'exécution du tableau par le biais d'un for
boucle:
for name in data_inputs:
sci=fits.open(name+'.fits')
#image is manipulated
Il n'ya aucune raison pourquoi j'ai modifier une image avant toute autre, est-il donc possible d'utiliser les 4 coeurs sur ma machine avec chaque base en cours d'exécution à travers la boucle sur une autre image?
J'ai lu sur le multiprocessing
module, mais je suis pas sûr de la façon de l'appliquer dans mon cas.
Je suis désireux d'obtenir multiprocessing
de travailler parce que finalement je vais devoir l'exécuter sur+ de 10 000 images.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser
multiprocessing.Piscine
:pool = Pool(os.cpu_count())
C'est une méthode générique de l'utilisation de multitraitement.os.cpu_count()
a été ajouté en Python 3.4. Pour Python 2.x, utilisezmultiprocessing.cpu_count()
.Pool()
est le même quePool(os.cpu_count())
Pool()
appelé sans valeur deprocesses
est le même quePool(processes=cpu_count())
peu importe si vous êtes à l'aide de Python 3 ou 2 - donc, la meilleure pratique dans l'une ou l'autre version est à utiliserPool()
. docs.python.org/2/library/multiprocessing.htmlVous pouvez utiliser
multiprocessing.Pool
:data_inputs
est un objet iterable (comme dans une normemap
).Sinon
TypeError: 'Pool' object is not callable