mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-11 15:56:07 -07:00
Fix memory leak in exporter
This commit is contained in:
parent
5a14b5bc35
commit
39d6edd581
1 changed files with 29 additions and 28 deletions
|
@ -128,6 +128,9 @@ class Export(object):
|
||||||
self.file_size = 0
|
self.file_size = 0
|
||||||
self.exported_thumb = False
|
self.exported_thumb = False
|
||||||
self.exported_art = False
|
self.exported_art = False
|
||||||
|
|
||||||
|
self._total_items = 0
|
||||||
|
self._exported_items = 0
|
||||||
self.success = False
|
self.success = False
|
||||||
|
|
||||||
# Reset export options for m3u8
|
# Reset export options for m3u8
|
||||||
|
@ -1660,11 +1663,14 @@ class Export(object):
|
||||||
method = getattr(self.obj, self.export_type)
|
method = getattr(self.obj, self.export_type)
|
||||||
items = method()
|
items = method()
|
||||||
|
|
||||||
|
self._total_items = len(items)
|
||||||
|
logger.info("Tautulli Exporter :: Exporting %d item(s).", self._total_items)
|
||||||
|
|
||||||
pool = ThreadPool(processes=plexpy.CONFIG.EXPORT_THREADS)
|
pool = ThreadPool(processes=plexpy.CONFIG.EXPORT_THREADS)
|
||||||
items = [ExportObject(self, item) for item in items]
|
items = [ExportObject(self, item) for item in items]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = pool.map(self._export_obj, items)
|
result = pool.map(self._do_export, items)
|
||||||
|
|
||||||
if self.individual_files:
|
if self.individual_files:
|
||||||
for item, item_result in zip(items, result):
|
for item, item_result in zip(items, result):
|
||||||
|
@ -1693,9 +1699,10 @@ class Export(object):
|
||||||
pool.join()
|
pool.join()
|
||||||
self.set_export_state()
|
self.set_export_state()
|
||||||
|
|
||||||
@staticmethod
|
def _do_export(self, item):
|
||||||
def _export_obj(export_obj):
|
result = item._export_obj()
|
||||||
return export_obj.export_obj(export_obj)
|
self._exported_items += 1
|
||||||
|
return result
|
||||||
|
|
||||||
def _save_file(self, result, obj=None):
|
def _save_file(self, result, obj=None):
|
||||||
filename = obj.filename
|
filename = obj.filename
|
||||||
|
@ -1923,32 +1930,10 @@ class Export(object):
|
||||||
|
|
||||||
return items
|
return items
|
||||||
|
|
||||||
def export_obj(self, export_obj):
|
def _export_obj(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_any_hdr(self, item, media_type):
|
def export_obj(self, obj):
|
||||||
pass
|
|
||||||
|
|
||||||
def get_image(self, item, image):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class ExportObject(Export):
|
|
||||||
def __init__(self, export, obj):
|
|
||||||
super(ExportObject, self).__init__()
|
|
||||||
self.__dict__.update(export.__dict__)
|
|
||||||
|
|
||||||
self.obj = obj
|
|
||||||
self.rating_key = self.obj.ratingKey
|
|
||||||
self.filename = self._filename(obj=self.obj)
|
|
||||||
self.title = self._filename(obj=self.obj, extension=False)
|
|
||||||
|
|
||||||
def export_obj(self, export_obj):
|
|
||||||
if isinstance(export_obj, ExportObject):
|
|
||||||
obj = export_obj.obj
|
|
||||||
else:
|
|
||||||
obj = export_obj
|
|
||||||
|
|
||||||
# Reload ~plexapi.base.PlexPartialObject
|
# Reload ~plexapi.base.PlexPartialObject
|
||||||
if hasattr(obj, 'isPartialObject') and obj.isPartialObject():
|
if hasattr(obj, 'isPartialObject') and obj.isPartialObject():
|
||||||
obj = obj.reload()
|
obj = obj.reload()
|
||||||
|
@ -2018,6 +2003,22 @@ class ExportObject(Export):
|
||||||
return os.path.join(os.path.basename(dirpath), filename)
|
return os.path.join(os.path.basename(dirpath), filename)
|
||||||
|
|
||||||
|
|
||||||
|
class ExportObject(Export):
|
||||||
|
def __init__(self, export, obj):
|
||||||
|
super(ExportObject, self).__init__()
|
||||||
|
self.__dict__.update(export.__dict__)
|
||||||
|
|
||||||
|
self.obj = obj
|
||||||
|
self.rating_key = self.obj.ratingKey
|
||||||
|
self.filename = self._filename(obj=self.obj)
|
||||||
|
self.title = self._filename(obj=self.obj, extension=False)
|
||||||
|
|
||||||
|
def _export_obj(self):
|
||||||
|
result = self.export_obj(self.obj)
|
||||||
|
self.obj = None # Clear the object to prevent memory leak
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def get_export(export_id):
|
def get_export(export_id):
|
||||||
db = database.MonitorDatabase()
|
db = database.MonitorDatabase()
|
||||||
result = db.select_single('SELECT timestamp, title, file_format, thumb_level, art_level, '
|
result = db.select_single('SELECT timestamp, title, file_format, thumb_level, art_level, '
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue