J'essaye d'utiliser python pour obtenir des performances sur une tâche qui peut être fortement parallélisée en utilisant http://docs.python.org/library/multiprocessing. En regardant leur bibliothèque, ils disent utiliser la taille de bloc pour les itérations très longues. Maintenant, mon itérable n'est pas long, un des dicts qu'il contient est énorme: ~ 100000 entrées, avec des tuples comme clés et des tableaux chiffrés pour les valeurs.Comment choisir une taille de segment pour le multitraitement python avec de grands ensembles de données
Comment est-ce que je placerais la taille de morceau pour manipuler ceci et comment je peux transférer ces données rapidement?
Merci.
Ah ok c'est logique. Actuellement, les ouvriers saisissent chacun la dictée géante, en font une copie, la modifient et retournent ensuite leur version. (pas exactement poids léger). Puisque vous semblez au gars qui connaît son multi-traitement python: Si le géant dict où être lu seulement est-il un moyen de permettre à tous les travailleurs d'accéder à ses données au besoin efficacement? (Ce serait facile avec les threads, mais avec le multiprocessing il devient difficile rapide, il semble) – Sandro
Si vous n'êtes pas sur Windows, et que vous faites en sorte que cette 'lecture seule' fasse partie du processus * avant * vous engendrer des travailleurs, et stocker dans (par exemple) un global ou un local fermé, tous les travailleurs peuvent y accéder sans subir le coût de sérialisation. –
Euh oh, je me rends compte maintenant que j'utilise la mauvaise terminologie. J'utilise en fait la fonction Pool.map_async() pour faire tout cela. Ai-je raison de supposer qu'en utilisant la carte, il n'y a pas de solution, seulement en forçant. Y a-t-il un coût sérieux pour se regrouper? – Sandro