MAX_FD = 5 FILENAME = __file__ import threading import os import random import resource import time resource.setrlimit(resource.RLIMIT_NOFILE, (MAX_FD, MAX_FD)) fds = [] def run_in_thread(): while True: try: fd = os.open(FILENAME, os.O_RDONLY) fds.append(fd) except OSError as exc: print(f"os.open failed: {exc!r}") break print(f"FDs open by the thread: {len(fds)} (max FD: {max(fds)})") for fd in range(MAX_FD): try: os.fstat(fd) valid = True except OSError: valid = False print(f"fd {fd} valid? {valid}") print("spawn thread") t = threading.Thread(target=run_in_thread) t.start() t.join() for fd in fds: os.close(fd) print("exit process")