Python efficace vers Python IPC
Ce qui serait une communication inter-processus (IPC) framework\technique avec les exigences suivantes:
- De transfert natif des objets Python entre deux Python processus
- Efficace dans le temps et dans l'UC (RAM efficacité, peu importe),
- De la croix-plate-forme Win\Linux
- Agréable d'avoir: fonctionne avec PyPy
Mise à JOUR 1: les processus sont sur le même hôte et d'utiliser les mêmes versions de Python et d'autres modules
Mise à JOUR 2: les processus sont exécutés de manière indépendante par l'utilisateur, pas un d'entre eux engendre les autres
source d'informationauteur Jonathan
Vous devez vous connecter pour publier un commentaire.
Objets natifs ne sont pas partagés entre les processus (en raison de comptage de référence).
Au lieu de cela, vous pouvez cornichons et les partager à l'aide des sockets de domaine unix, mmap, zeromq, ou d'un intermédiaire, notamment un sqlite3 qui est conçu pour les accès simultanés.
Utilisation multitraitement pour commencer.
Si vous avez besoin de plusieurs CPU, regarder céleri.
Les deux execnet et Pyro mention
PyPy <-> CPython
de la communication. Autres forfaits à partir de Python Wiki Le Traitement Parallèle page sont probablement approprié.En Parallèle Python peut-être en valeur un regard, il fonctionne sur Windows, OS X et Linux (et je me souviens je l'ai utilisé sur un UltraSPARC Solaris 10 machine a tout à l'arrière). Je ne sais pas si cela fonctionne avec PyPy, mais il ne semble plus fonctionner avec Psyco.
Après quelques test, j'ai trouvé que l'approche suivante fonctionne pour Linux à l'aide de
mmap
.Linux a
/dev/shm
. Si vous créez une mémoire partagée à l'aide de POSIXshm_open
un nouveau fichier est créé dans ce dossier.Bien que python
mmap
module ne fournit pas lesshm_open
fonction. nous pouvons utiliser une normaleopen
pour créer un fichier dans/dev/shm
et il est vraiment similaire et qui résident dans la mémoire. (Utiliseros.unlink
pour l'enlever)Puis de l'IPC, nous pouvons utiliser
mmap
de carte que fichier pour les différents processus' espace de mémoire virtuelle. Tous les processus de partage de la mémoire. Python peut utiliser la mémoire tampon, et de créer des objets tels que des octets et des tableaux numpy. Ou on peut l'utiliser par le biais de lactypes
interface.Bien sûr, le processus de synchronisation primitives sont encore nécessaires afin d'éviter des conditions de course.
Voir mmap docctypes doc et
numpy.charger
qui a unmmap_mode
option.