NTHREAD = 1000 MAX_FD = 5 MAX_SLEEP = 1.0 FILENAME = __file__ import threading import os import random import resource import time resource.setrlimit(resource.RLIMIT_NOFILE, (MAX_FD, MAX_FD)) def random_sleep(): seconds = MAX_SLEEP * random.random() time.sleep(seconds) def run_in_thread(): try: fd = os.open(FILENAME, os.O_RDONLY) except OSError: pass else: random_sleep() os.close(fd) threads = [] try: for i in range(NTHREAD): t = threading.Thread(target=run_in_thread) threads.append(t) t.start() for t in threads: t.join() except Exception as e: print("Caught exception", e)