Skip to content

Instantly share code, notes, and snippets.

@mdellavo
Created April 19, 2010 22:57
Show Gist options
  • Save mdellavo/371773 to your computer and use it in GitHub Desktop.
Save mdellavo/371773 to your computer and use it in GitHub Desktop.
from threading import Thread, BoundedSemaphore
class Worker(Thread):
def __init__(self, sema, target, args, kwargs):
super(Worker, self).__init__()
self.sema = sema
self.target = target
self.args = args
self.kwargs = kwargs
def run(self):
self.sema.acquire()
self.target(*self.args, **self.kwargs)
self.sema.release()
class WorkerManager:
def __init__(self, max_workers):
self.worker_sema = BoundedSemaphore(max_workers)
def queue_job(self, target, *args, **kwargs):
thread = Worker(self.worker_sema, target, args, kwargs)
thread.start()
if __name__ == '__main__':
from string import lowercase
from time import sleep
def job(id):
print id, 'is alive'
for i in range(3):
print id, i
sleep(1)
print id, 'dies'
worker_manager = WorkerManager(5)
for i in lowercase:
worker_manager.queue_job(job, i)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment