web-dev-qa-db-fra.com

paramètre "chunksize" dans le multiprocessing.Pool.map de Python

Si j'ai un objet pool avec 2 processeurs par exemple:

p=multiprocessing.Pool(2)

et je veux parcourir une liste de fichiers sur le répertoire et utiliser la fonction de carte

quelqu'un pourrait-il expliquer quelle est la taille de cette fonction:

p.map(func, iterable[, chunksize])

Si je règle par exemple la taille de bloc à 10, cela signifie-t-il que tous les 10 fichiers doivent être traités avec un seul processeur?

43
sergio

En regardant la documentation pour Pool.map il semble que vous ayez presque raison: le paramètre chunksize provoquera la division de l'itérable en morceaux de environ cette taille, et chaque pièce est soumise comme une tâche distincte.

Donc, dans votre exemple, oui, map prendra les 10 premiers (approximativement), le soumettra comme tâche pour un seul processeur ... puis les 10 suivants seront soumis comme une autre tâche, et ainsi de suite. Notez que cela ne signifie pas que les processeurs alterneront tous les 10 fichiers, il est fort possible que le processeur n ° 1 finisse par obtenir 1-10 ET 11-20, et le processeur n ° 2 obtienne 21-30 et 31-40.

38
detly