我想稍微自动化一下手刹,并用python编写了一个小程序。 现在我有一个关于子进程和线程模块的问题。我想动态更改我运行的手刹进程的数量。我实现了队列模块,用于获取和放置电影。在
CompressThread
调用handbrake类中的encode方法,并encode调用_execute
。现在我想存储进度,我在手刹类,压缩机类集中读到的。所以我可以将进度发布到asocketserver
和awebgui
。不,我写一个sqlite3
数据库,但这应该被删除(因为线程问题),并且只有在程序退出时保存。在
我认为集中保存数据的唯一方法是创建另一个线程,并轮询CompressThread
类中的数据。我的问题是我的程序有4个线程。在
有更好的解决办法吗?也许数据库没有错,我不应该删除它?在
压缩机等级:
class CompressThread(threading.Thread):
""" Manage the queue of movies to be compressed
"""
def __init__(self):
threading.Thread.__init__(self)
self._config = ConfigParser()
self._config.process_config()
self._handbrake = self._config.get_handbrake()
self._lock = threading.Lock()
def run(self):
while True:
movie_id = QUEUE.get()
return_code = self._handbrake.encode(movie_id)
print(return_code)
QUEUE.task_done()
class Compressor(object):
""" Compresses given mkv file
Attributes:
"""
__MAX_THREADS = 1
def __init__(self):
self._dest_audio_tracks = None
self._log = None
self.settings = None
self.config = ConfigParser()
self._database = db.DB()
self._database.connect()
self._running = True
self._threads = []
try:
self.handbrake, self._log = self.config.process_config()
self._log = logging.getLogger("Compressor")
except ConfigError as error:
raise Error("Config error: {0}".format(error))
def process_file(self, input_file, output_file, title):
if not os.path.exists(input_file):
self._log.warning("Input file not exists: {0}".format(input_file))
print("Input file not found: {0}".format(input_file))
else:
media_info = mediainfo.Mediainfo.parse(input_file)
movie_settings = settings.Settings(input_file, title, output_file)
movie_settings.parse(media_info)
self._log.info("Added file {0} to list".format(movie_settings.input_file))
QUEUE.put(self._database.insert_movie(movie_settings))
print("File added.")
def start(self):
self._threads = [CompressThread() for i in range(self.__MAX_THREADS)]
for thread in self._threads:
thread.setDaemon(True)
thread.start()
while self._running:
cmd = input("mCompress> ")
if cmd == "quit":
self._running = False
elif cmd == "status":
print("{0}".format(self._threads))
elif cmd == "newfile":
input_file = input("mCompress> newFile> Input filename> ")
output_file = input("mCompress> newFile> Output filename> ")
title = input("mCompress> newFile> Title> ")
self.process_file(input_file, output_file, title)
def _initialize_logging(self, log_file):
try:
self._log_file = open(log_file, "a+")
except IOError as error:
log_error = "Could not open log file {0}".format(error)
self._log.error(log_error)
raise IOError(log_error)
self._log_file.seek(0)
if __name__ == "__main__":
options_parser = OptionsParser()
args = options_parser.parser.parse_args()
if args.start:
Compressor().start()
手刹类的一部分:
^{2}$
目前没有回答
相关问题
PyPI热门下载资源包