# Bryan Schumaker (8/19/2010)

import threading
Thread     = threading.Thread
Mutex      = threading.Lock


mutex_mutex = Mutex()
mutexes     = dict()


class BG_Thread(Thread):
	def __init__(self, func, *args):
		Thread.__init__(self)
		self.func = func
		self.args = args
	def run(self):
		self.func(*self.args)


def background(func, *args):
	try:
		th = BG_Thread(func, *args)
		th.start()
		return th
	except Exception,e:
		print e
		return None


def get_mutex(lock_name):
	global mutexes
	global Mutex
	global mutex_mutex
	mutex_mutex.acquire()
	lock = mutexes.get(lock_name, None)
	if lock == None:
		lock = Mutex()
		mutexes[lock_name] = lock
	mutex_mutex.release()
	return lock
