@@ -39,6 +39,7 @@ def setup_tests(ns):
39
39
for signum in signals :
40
40
faulthandler .register (signum , chain = True , file = stderr_fd )
41
41
42
+ _adjust_resource_limits ()
42
43
replace_stdout ()
43
44
support .record_original_stdout (sys .stdout )
44
45
@@ -133,3 +134,26 @@ def restore_stdout():
133
134
sys .stdout .close ()
134
135
sys .stdout = stdout
135
136
atexit .register (restore_stdout )
137
+
138
+
139
+ def _adjust_resource_limits ():
140
+ """Adjust the system resource limits (ulimit) if needed."""
141
+ try :
142
+ import resource
143
+ from resource import RLIMIT_NOFILE , RLIM_INFINITY
144
+ except ImportError :
145
+ return
146
+ fd_limit , max_fds = resource .getrlimit (RLIMIT_NOFILE )
147
+ # On macOS the default fd limit is sometimes too low (256) for our
148
+ # test suite to succeed. Raise it to something more reasonable.
149
+ # 1024 is a common Linux default.
150
+ desired_fds = 1024
151
+ if fd_limit < desired_fds and fd_limit < max_fds :
152
+ new_fd_limit = min (desired_fds , max_fds )
153
+ try :
154
+ resource .setrlimit (RLIMIT_NOFILE , (new_fd_limit , max_fds ))
155
+ print (f"Raised RLIMIT_NOFILE: { fd_limit } -> { new_fd_limit } " )
156
+ except (ValueError , OSError ) as err :
157
+ print (f"Unable to raise RLIMIT_NOFILE from { fd_limit } to "
158
+ f"{ new_fd_limit } : { err } ." )
159
+
0 commit comments