【问题标题】:python settimeout permanent printpython settimeout 永久打印
【发布时间】:2014-12-23 13:09:04
【问题描述】:

我有下一个不良行为:

def run(self):
        self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self._socket.bind(("0.0.0.0", self.port()))
        self._socket.listen(5)
        self._socket.settimeout(5.0)
        while not self.finish.isSet():
            try:
                conn, addr = self._socket.accept()
                c = connection(conn, addr)
                self.activeconn.append(c)
                c.start()
                print "New session from address {}".format(addr)
            except Exception as e:
                print e
            self.activeconn = self.child_list()
        self._socket.close()
        print "Server is closing..."
        for conn in self.activeconn:
            conn.join()
        time.sleep(4)
        print "Server is closed"

这里我有由 settimeout(5.0) 设置超时的回显服务器。问题是每次超时过期时我的控制台都会打印“超时”。我可以以某种方式关闭它吗?

【问题讨论】:

    标签: python sockets timeout


    【解决方案1】:

    只要在套接字操作期间发生超时,就会引发socket.timeout 异常。在您的代码中,您正在捕获该异常并打印它:

    try:
        conn, addr = self._socket.accept()
        # ...
    except Exception as e:
        print e
    

    如果您想防止“超时”行出现在输出中,只需捕获异常并抑制它:

    try:
        conn, addr = self._socket.accept()
        # ...
    except socket.error:
        pass
    except Exception as e:
        print e
    

    【讨论】:

      猜你喜欢
      • 2013-05-24
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      相关资源
      最近更新 更多