diff -r 540a9c69c2ea Doc/library/selectors.rst --- a/Doc/library/selectors.rst Fri Sep 13 19:53:08 2013 +0200 +++ b/Doc/library/selectors.rst Sat Oct 05 16:32:42 2013 +0200 @@ -164,6 +164,10 @@ This returns the :class:`SelectorKey` instance associated to this file object, or raises :exc:`KeyError` if the file object is not registered. + .. method:: keys() + + Return all the registered keys. + .. class:: DefaultSelector() diff -r 540a9c69c2ea Lib/selectors.py --- a/Lib/selectors.py Fri Sep 13 19:53:08 2013 +0200 +++ b/Lib/selectors.py Sat Oct 05 16:32:42 2013 +0200 @@ -162,6 +162,14 @@ except KeyError: raise KeyError("{!r} is not registered".format(fileobj)) from None + def keys(self): + """Return all the registered keys. + + Returns: + set of registered keys + """ + return set(self._fd_to_key.values()) + def __enter__(self): return self diff -r 540a9c69c2ea Lib/test/test_selectors.py --- a/Lib/test/test_selectors.py Fri Sep 13 19:53:08 2013 +0200 +++ b/Lib/test/test_selectors.py Sat Oct 05 16:32:42 2013 +0200 @@ -153,6 +153,21 @@ # unknown file obj self.assertRaises(KeyError, s.get_key, 999999) + def test_keys(self): + s = self.SELECTOR() + self.addCleanup(s.close) + + rd, wr = socketpair() + self.addCleanup(rd.close) + self.addCleanup(wr.close) + + key1 = s.register(rd, selectors.EVENT_READ) + key2 = s.register(wr, selectors.EVENT_WRITE) + self.assertEqual(set([key1, key2]), s.keys()) + + s.unregister(rd) + self.assertEqual(set([key2]), s.keys()) + def test_select(self): s = self.SELECTOR() self.addCleanup(s.close)