#!/usr/bin/python import os, sys, threading, time class ThreadStuff(threading.Thread): def __init(self): print "ThreadStuff: init" threading.Thread.__init__(self) def start_doing_stuff(self): self.start() def run(self): print "ThreadStuff: running (rlock = %s)" % global_rlock global_rlock.acquire() print "ThreadStuff: I OWN THE LOCK" time.sleep(5) global_rlock.release() print "ThreadStuff: dropped it. Sleeping forever" time.sleep(86400) # --- global_rlock = threading.RLock(verbose=True) ts = ThreadStuff() ts.start() time.sleep(1) print "forking" pid = os.fork() if pid: print "parent: running (rlock = %s)" % global_rlock else: print "child: running (rlock = %s) getting the lock..." % global_rlock global_rlock.acquire() print "child: got the lock" sys.exit(0) time.sleep(10)