我们从Python开源项目中,提取了以下2个代码示例,用于说明如何使用twisted.internet.reactor.getReaders()。
def close(self): """ close all http connections. returns a deferred that fires once they're all closed. """ def validate_client(client): """ Validate that the connection is for the current client :param client: :return: """ host, port = client.addr parsed_url = urlparse(self._hostname) return host == parsed_url.hostname and port == parsed_url.port # read https://github.com/twisted/treq/issues/86 # to understand the following... def _check_fds(_): fds = set(reactor.getReaders() + reactor.getReaders()) if not [fd for fd in fds if isinstance(fd, Client) and validate_client(fd)]: return return deferLater(reactor, 0, _check_fds, None) pool = self._async_http_client_params["pool"] return pool.closeCachedConnections().addBoth(_check_fds)
def test_pauseProducingInConnectionMade(self): """ In C{connectionMade} of a client protocol, C{pauseProducing} used to be ignored: this test is here to ensure it's not ignored. """ server = MyServerFactory() client = MyClientFactory() client.protocolConnectionMade = defer.Deferred() port = reactor.listenTCP(0, server, interface='127.0.0.1') self.addCleanup(port.stopListening) connector = reactor.connectTCP( port.getHost().host, port.getHost().port, client) self.addCleanup(connector.disconnect) def checkInConnectionMade(proto): tr = proto.transport # The transport should already be monitored self.assertIn(tr, reactor.getReaders() + reactor.getWriters()) proto.transport.pauseProducing() self.assertNotIn(tr, reactor.getReaders() + reactor.getWriters()) d = defer.Deferred() d.addCallback(checkAfterConnectionMade) reactor.callLater(0, d.callback, proto) return d def checkAfterConnectionMade(proto): tr = proto.transport # The transport should still not be monitored self.assertNotIn(tr, reactor.getReaders() + reactor.getWriters()) client.protocolConnectionMade.addCallback(checkInConnectionMade) return client.protocolConnectionMade