Communication Inter Processus

Communication Inter Processus - Python - Programmation

Marsh Posté le 13-12-2002 à 14:39:45    

Quelle est la la manière la plus simple pour etablir une communication inter processus (processus, pas thread !!!), sachant que je souhaite que le code soit aussi bien utilisable sous Unix, que sous Windows... Et si possible autorisant le pasage direct d'objets...
 
J'ai pensé à utiliser des sockets et a communiquer les objets par serialization/deserialization (comme je l'aurais fait en Java), mais malheuresement mes objets ne sont pas serializables (c'est (c)pickle qui me le dit).
 
Quelqu'un a une idée ? un truc ?
J'ai aussi essayé les win32pipe, mais sans succès (la doc est pas très claire faut dire...).
 
Toute info/astuce est la très bienvenue !


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 13-12-2002 à 14:39:45   

Reply

Marsh Posté le 13-12-2002 à 14:46:45    

Utilises des sockets, mais n'utilises pas pickle alors.
 
PS : Woooooooowow ! Un topic Python !!! Ca fesait longtemps.


Message édité par Kristoph le 13-12-2002 à 14:47:10
Reply

Marsh Posté le 13-12-2002 à 14:50:30    

Kristoph a écrit :

Utilises des sockets, mais n'utilises pas pickle alors.
 
PS : Woooooooowow ! Un topic Python !!! Ca fesait longtemps.


 
Ouais, mais le probleme c'est que mes objets sont assez complexes, c'est pas moi qui les ait crées (c'est des objets VTK, si tu connais...) et ils reposent sur du C++...
Donc je peux pas me permettre de les decomposer champ par champs (surtout que je ne connais leur type exacte qu'a l'execution).
C'est pour ca, si y avait un moyen plus simple de passer des objet d'un process a un autre...
Personne ne connait un substitut a pickle ???


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 13-12-2002 à 14:54:51    

C'est probablement la raison pour laquelle pickle ne peut pas les serialiser. Dans ton cas, il ne reste pas beaucoup de choix :
 
- Tu met en place un protocole de communication entre tes 2 processus et tu utilises les sockets pour ça.
- Tu ajoutes à chacun de tes objets des méthodes qui leur permet de se serialiser eux même ( lourd si il y a beaucoup de classes differentes )

Reply

Marsh Posté le 13-12-2002 à 14:57:28    

Kristoph a écrit :

C'est probablement la raison pour laquelle pickle ne peut pas les serialiser. Dans ton cas, il ne reste pas beaucoup de choix :
 
- Tu met en place un protocole de communication entre tes 2 processus et tu utilises les sockets pour ça.
- Tu ajoutes à chacun de tes objets des méthodes qui leur permet de se serialiser eux même ( lourd si il y a beaucoup de classes differentes )
 


Impossible, parce que non seulement y a beaucoup de classes, mais en plus, les wrappers pythons qui les manipulent sont générés de facons automatique, et pas par moi...


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 13-12-2002 à 15:03:41    

attention, je vais dire un gros mot.
 
CORBA ?

Reply

Marsh Posté le 13-12-2002 à 15:18:06    

lorill a écrit :

attention, je vais dire un gros mot.
 
CORBA ?


Ah j'ai oublié de préciser : pas CORBA.
 
Explication : en fait c'est un probleme de oufs (reellement !!!).
 
J'ai une appli python qui utilise omniorbpy (CORBA n'est pas un gros mot pour moi  :) ) et qui recoit des evennement par un eventchannel sur le bus CORBA...
Ces evenement contiennent des objets a partir desquels je construis des objets VTK, ceci afin de pouvoir les visualiser dans Mayavi (programme de visu VTK en python, donc controlable depuis python).
Tout le monde me suis jusque la ?
 
Or il se trouve que Mayavi utilise tkInter, et que les boucles de gestion des evennement CORBA et Tk ne s'entendent pas du tout, du tout. Je suis donc obligé pour cela de séparer la gestion des evennements CORBA, et la gestion de Mayavi dans deux process differents (j'ai essayé dans deux threads, ca ne focntionne pas). Il me faut donc un moyen pour les faire communiquer, et CORBA n'est pas possible, car pour povoir etre informé de l'arrivée de donnée a afficher, mon process Mayavi a deux choix :
1) disposer d'un ecouteur d'event => retour au probleme original, on tourne en rond
2) Proposer un objet sur le bus Corba qui est appelé par l'autre process => meme problème
 
Je sais pas si c'est tres clair, mais faut dire que le probleme est complexe. Mais bon jai peut etre une soluce (faut que je teste), mais bon, c'est tellement propre a mon probleme que je ne la detaillerait pas ici !!! (je vais vous epargner ca  :D ).
 
Mais si quelqu'un a une idée, je suis preneur !!!


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 19-12-2002 à 10:47:58    

UP  :bounce:  
 
Ca marche pas, j'ai toujours un probleme de thread et de boucles de gestion d'evenement qui entrent en conflit (cette fois TKinter (mayavi) et mon thread de gestion du socket).
 
Donc si quelqu'un a deja resolu des problèmes de conflit de thread avec TK, je suis preneur de coneils (y a bien le cas de fnorb + tkinter => TkReactor mais je comprends rien a leur code...).


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed