Skip to content

Instantly share code, notes, and snippets.

@BlaShadow
Created September 5, 2013 18:46
Show Gist options
  • Save BlaShadow/6454383 to your computer and use it in GitHub Desktop.
Save BlaShadow/6454383 to your computer and use it in GitHub Desktop.
Barrier design pattern python example
#threads
import thread
import threading
import time
class ThreadTask(threading.Thread):
def __init__(self,name,delay,callback):
threading.Thread.__init__(self)
self.name = name
self.counter = 0
self.delay = delay
self.callback = callback
self.lock = threading.Lock()
def run(self):
while True:
self.counter += 1
print 'running ', self.name , self.counter
time.sleep(self.delay)
if self.counter % 5 == 0:
self.callback(self)
class Barrier(object):
def __init__(self):
self.locks = []
def wait_task(self,task):
print 'lock acquire'
self.locks.append(task.lock)
task.lock.acquire(True)
self.locks.append(task.lock)
task.lock.acquire(True)
def notity_task(self,task):
print 'release lock'
for i in self.locks:
try:
i.release()
except Exception, e:
print 'Error',e.message
print 'Lock released'
self.locks = []
try:
barrier = Barrier()
task1 = ThreadTask('Task_1',1,barrier.wait_task)
task4 = ThreadTask('Task_4',1,barrier.wait_task)
task3 = ThreadTask('Task_3',2,barrier.wait_task)
task2 = ThreadTask('Task_2',3,barrier.notity_task)
task2.start()
task1.start()
task3.start()
task4.start()
except Exception as e:
raise e
while 1:
pass
def print_progres(threadName,delay):
count = 0
while count < 10:
time.sleep(delay)
count += 1
print ' {} {} '.format(threadName,time.ctime( time.time() ))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment