]> granicus.if.org Git - python/commitdiff
Issue #18934: Use poll/select-based selectors for multiprocessing.Connection,
authorCharles-François Natali <cf.natali@gmail.com>
Sun, 8 Sep 2013 09:30:53 +0000 (11:30 +0200)
committerCharles-François Natali <cf.natali@gmail.com>
Sun, 8 Sep 2013 09:30:53 +0000 (11:30 +0200)
to avoid one extra FD per Connection.

Lib/multiprocessing/connection.py

index 59fb6640d5bbf76510af2d6a23a59c2d0637449f..27fda9f22c68d18b3bf3cca6b09443e42480f2a8 100644 (file)
@@ -878,13 +878,21 @@ else:
 
     import selectors
 
+    # poll/select have the advantage of not requiring any extra file
+    # descriptor, contrarily to epoll/kqueue (also, they require a single
+    # syscall).
+    if hasattr(selectors, 'PollSelector'):
+        _WaitSelector = selectors.PollSelector
+    else:
+        _WaitSelector = selectors.SelectSelector
+
     def wait(object_list, timeout=None):
         '''
         Wait till an object in object_list is ready/readable.
 
         Returns list of those objects in object_list which are ready/readable.
         '''
-        with selectors.DefaultSelector() as selector:
+        with _WaitSelector() as selector:
             for obj in object_list:
                 selector.register(obj, selectors.EVENT_READ)