def make_source(items):
class TaskSource(object):
def __init__(self, items):
self.lock = threading.Lock()
self.gen = itertools.chain(items, itertools.repeat(None))
def get(self):
self.lock.acquire()
item = self.gen.next()
self.lock.release()
return item
return TaskSource(items)