RuiRuiHigh
Initial Hyperion MT deepfake detector upload
acb3a72
Raw
History Blame Contribute Delete
850 Bytes
"""
Copyright 2018 Johns Hopkins University (Author: Jesus Villalba)
Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
"""
import threading
class ThreadSafeIter:
"""
Takes an iterator/generator and makes it thread-safe by
serializing call to the `next` method of given iterator/generator.
"""
def __init__(self, it):
self.it = it
self.lock = threading.Lock()
def __iter__(self):
return self
def __next__(self):
with self.lock:
return self.it.__next__()
def next(self):
with self.lock:
return self.it.next()
def threadsafe_generator(f):
"""
A decorator that takes a generator function and makes it thread-safe.
"""
def generator(*args, **kwargs):
return ThreadSafeIter(f(*args, **kwargs))
return generator