• [^] # Re: Deux petites questions

    Posté par . En réponse à la dépêche Python 3.4 est sorti avec 7 nouveaux modules. Évalué à 4.

    Tout l'intérêt est d'éviter d'hériter des données (et surtout des ressources systèmes : fichiers ouverts, sockets, verrous...) du processus principal, donc la question ne se pose pas : pour passer des données au fils, il faut les sérialiser.

    Je n'utilise peut-être pas les bon mots, je ne suis pas spécialiste du domaine. Disons que je fais n calculs en parallèle sur un tableau numpy qui peut faire quelques dizaines de Go mais je ne modifie jamais ce tableau. Si je passe naïvement ce tableau ça massacre les performances dans les grandes largeurs, sans parler de l'occupation en mémoire. Donc je cherche à partager ce grand tableau entre les processus. Pour cela je mets les données dans un module tiers que j'importe et par la magie du copy-on-write ça marche bien et vite avec fork(). Le problème est que sur d'autres plateformes ou avec certaines bibliothèques numériques, style OpenBLAS, fork() mène à un deadlock. En théorie forkserver est une solution de ce que j'ai lu1. Je me demande donc si la méthode de partager des données via un import va fonctionner aussi bien avec forkserver.

    1 https://github.com/obspy/obspy/wiki/Notes-on-Parallel-Processing-with-Python-and-ObsPy