47 lines
917 B
Python
47 lines
917 B
Python
"""
|
|
pdf2image filename generators
|
|
"""
|
|
|
|
import uuid
|
|
import threading
|
|
|
|
|
|
class ThreadSafeGenerator(object):
|
|
"""Wrapper around generator that protects concurrent access"""
|
|
|
|
def __init__(self, gen):
|
|
self.gen = gen
|
|
self.lock = threading.Lock()
|
|
|
|
def __iter__(self):
|
|
return self
|
|
|
|
def __next__(self):
|
|
with self.lock:
|
|
return next(self.gen)
|
|
|
|
|
|
def threadsafe(f):
|
|
"""Decorator to make generator threadsafe. Fix #125"""
|
|
|
|
def g(*a, **kw):
|
|
return ThreadSafeGenerator(f(*a, **kw))
|
|
|
|
return g
|
|
|
|
|
|
@threadsafe
|
|
def uuid_generator():
|
|
"""Returns a UUID4"""
|
|
while True:
|
|
yield str(uuid.uuid4())
|
|
|
|
|
|
@threadsafe
|
|
def counter_generator(prefix="", suffix="", padding_goal=4):
|
|
"""Returns a joined prefix, iteration number, and suffix"""
|
|
i = 0
|
|
while True:
|
|
i += 1
|
|
yield str(prefix) + str(i).zfill(padding_goal) + str(suffix)
|