- Ike,
Salut, voilà, j’ai un problème qui est très probablement assez simple en python, mais étant une quiche en programmation parallèle j’y ai passé déjà 2 jours de taff
En gros, je construis un dictionnaire qui me sert à représenter un plan 2D (je peux switcher éventuellement à un tableau 2 dimensions étant donné que j’utilise un dictionnaire juste pour pouvoir utiliser des tuples en indice pour stocker mes coordonnées (x,y))
Je passe plusieurs fois sur ce dictionnaire de 5000x5000 entrées (d’où le côté lent de l’exécution) pour faire différents traitements avec des données (en gros des simulations de physique en 2D, mais c’est juste à chaque fois des opérations super simples). j’ai décidé de paralléliser le tout avec le package multiprocessing natif de python en utilisant un ProcessPoolExecutor et en passant mon dictionnaire à mes processus qui s’exécutent en parallèle avec un dict de la classe Manager Sauf que je ne sais pas si ce sont les opérations de lecture, d’écriture ou les deux mais c’est terriblement long (plus même qu’avant parallélisation) et clairement pas viable J’suis sur que ça vient de ça parce que quand je fais les calculs mais que je n’utilise pas ce dictionnaire, juste un dictionnaire dans mon sous-processus (et donc que je n’ai pas accès dans mon main processus à ces résultats) mon programme s’exécute environ 4x plus vite que sans, mais dès que je réutilise le dict du Manager pour récupérer les résultats, on arrive quasiment à un programme 2x moins rapide, puis j’ai vu quelques personnes se plaindre de cette lenteur aussi ci et là
Du coup deux questions, déjà est-ce que si je passais aux listes de la classe Manager j’aurai des chances d’avoir un gain de performances ? (je vais aller vérifier ça de mon côté mais si quelqu’un le sait d’avance)
et ensuite quels autres solutions j’aurais pour pouvoir garder cette structure de données qui est assez complexe (un couple (x,y) renvoie à un objet unique qui peut s’étendre ou non sur plusieurs coordonnées donc difficile de faire autrement qu’avec un dict ou une liste de ces objets
Je met pas d’extrait de code parce que je vois pas trop en quoi ça serait cohérent, grosso modo la 1ere partie ou je l’utilisais c’était pour initialiser mon dictionnaire, donc un double for et on fait un
grid[y, x] = None
, vraiment rien de complexe mais toutes les solutions que j’ai trouvé et qui semblaient donner quelque chose reposaient sur Manager
Merci d’avance!