【问题标题】:Multiple socket monitoring多套接字监控
【发布时间】:2011-07-04 10:49:19
【问题描述】:

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

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

谢谢,

【问题讨论】:

  • 如果您循环调用 select(rlist),当检测到套接字状态发生变化时,是什么阻止您调整 rlist?
  • @jd:python 程序是单个进程。因此,如果它正在等待套接字客户端连接,它将阻塞。
  • 可以在监听socket上选择。准备好后,调用 mySocket.accept()。

标签: python sockets select ipc multiprocessing


【解决方案1】:

在这种情况下,您可以使用 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()

【讨论】:

    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2015-06-04
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多