Skip to content

Commit 45e2551

Browse files
committed
Issue #18934: Use poll/select-based selectors for multiprocessing.Connection,
to avoid one extra FD per Connection.
1 parent 742d871 commit 45e2551

1 file changed

Lines changed: 9 additions & 1 deletion

File tree

Lib/multiprocessing/connection.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -878,13 +878,21 @@ def wait(object_list, timeout=None):
878878

879879
import selectors
880880

881+
# poll/select have the advantage of not requiring any extra file
882+
# descriptor, contrarily to epoll/kqueue (also, they require a single
883+
# syscall).
884+
if hasattr(selectors, 'PollSelector'):
885+
_WaitSelector = selectors.PollSelector
886+
else:
887+
_WaitSelector = selectors.SelectSelector
888+
881889
def wait(object_list, timeout=None):
882890
'''
883891
Wait till an object in object_list is ready/readable.
884892
885893
Returns list of those objects in object_list which are ready/readable.
886894
'''
887-
with selectors.DefaultSelector() as selector:
895+
with _WaitSelector() as selector:
888896
for obj in object_list:
889897
selector.register(obj, selectors.EVENT_READ)
890898

0 commit comments

Comments
 (0)