from __future__ import print_function import os import sys import threading import thread import time def do_nothing(): time.sleep(3) def do_fork(): time.sleep(1) if os.fork(): sys.exit(0) do_child() def do_verify(i): time.sleep(1 + i/10.) frame_from_sys = sys._current_frames()[thread.get_ident()] real_frame = sys._getframe() assert frame_from_sys is real_frame time.sleep(1) def do_child(): for i in range(5): threading.Thread(target=do_verify, args=(i,)).start() def dotest(): for i in range(4): threading.Thread(target=do_nothing).start() threading.Thread(target=do_fork).start() if __name__ == "__main__": dotest()