From 9ba0d656adb53cd1722bf98e470ca4940799c150 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Sat, 13 Aug 2011 12:44:12 +0200 Subject: Use a single thread for recoding. --- recode.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'recode.py') diff --git a/recode.py b/recode.py index 5f5a623..6caa2a9 100644 --- a/recode.py +++ b/recode.py @@ -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() -- cgit v1.2.3