多插座监控

时间:2011-07-04 10:49:19

标签: python sockets select ipc multiprocessing

我正在设计一个python程序,它将通过套接字同时与另外两个进程通信。其中一个进程是一个C守护进程,所以这个套接字将一直处于活动状态 - 没有问题。另一个过程是PHP网页。因此套接字不会一直建立。大多数情况下,套接字是侦听端口上的()。

如果两个套接字始终处于活动状态,则可以使用简单的select()调用来监视两者的输入。但在我的情况下,这是不可能的。我怎样才能轻松实现这一目标?

谢谢,

1 个答案:

答案 0 :(得分:2)

在这种情况下,您可以使用select(),即使在只有阻塞套接字的单线程单进程程序中也是如此。以下是使用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()