2011-07-04 3 views
0

Je suis en train de concevoir un programme python qui parlera à deux autres processus en même temps via des sockets. L'un des processus est un démon C donc cette socket sera toujours en vie - pas de problème là-bas. L'autre processus est une page web PHP. Donc, cette prise n'est pas établie tout le temps. La plupart du temps, le socket est listen() sur un port.Surveillance de plusieurs sockets

Si les deux socket sont actifs tout le temps, un simple appel select() peut être utilisé pour surveiller les entrées des deux. Mais dans ma situation, ce n'est pas possible. Comment puis-je y parvenir facilement?

Merci,

+0

Si votre mise en boucle autour d'un appel pour sélectionner (rlist), ce qui vous empêche d'adapter rlist lorsqu'un changement dans l'état de votre prise est détectée? –

+0

@jd: le programme python est un processus unique. Donc, s'il attend le client socket pour se connecter, il bloquera. – lang2

+0

Vous pouvez sélectionner sur la prise d'écoute. Quand c'est prêt, appelez mySocket.accept(). –

Répondre

2

Vous pouvez utiliser select() dans ce cas, même dans un seul thread programme unique processus de prises de blocage uniquement. Voilà comment vous accepter les connexions entrantes avec select():

daemonSocket = socket.socket() 
... 
phpListenSocket = socket.socket() 
phpListenSocket.bind(...) 
phpListenSocket.listen(...) 
phpSocket = None 

while True: 
    rlist = ... 
    rready, wready, eready = select(rlist, [], []) 
    if phpListenSocket in rready: 
     phpSocket, remoteAddr = phpListenSocket.accept() 
Questions connexes