diff options
Diffstat (limited to 'recode.py')
-rw-r--r-- | recode.py | 34 |
1 files changed, 33 insertions, 1 deletions
@@ -1,4 +1,4 @@ -import subprocess, tempfile +import subprocess, tempfile, threading decoders = {} encoders = {} @@ -63,6 +63,38 @@ class Recoder(object): self.encoder.encode(temp.name, dest) temp.close() +class RecodeThread(threading.Thread): + lock = threading.Lock() + queue = [] + running = False + + def get_job(self): + return self.queue.pop(0) if len(self.queue) else None + + def run(self): + self.lock.acquire() + job = self.get_job() + while job: + self.lock.release() + + func, decoder, encoder, sessionid = job + func(decoder, encoder, sessionid) + + self.lock.acquire() + job = self.get_job() + + RecodeThread.running = False + self.lock.release() + + @classmethod + def add(cls, job): + cls.lock.acquire() + cls.queue.append(job) + if not cls.running: + cls.running = True + RecodeThread().start() + cls.lock.release() + if __name__ == '__main__': import sys ffmpeg = FFmpeg() |