sqlitedict cache e migliore gestione dei thread

This commit is contained in:
mac12m99
2021-09-28 20:13:15 +02:00
parent 613087342b
commit 1bd771b565
4 changed files with 25 additions and 6 deletions
+1 -1
View File
@@ -186,7 +186,7 @@ def search(item, texto):
def genres(item): def genres(item):
logger.debug(item) logger.debug(item)
data = support.httptools.downloadpage(item.url, cloudscraper=True).data data = support.httptools.downloadpage(item.url, cloudscraper=True).data
debugBlock=True # debugBlock=True
patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)' patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)'
if item.args == 'year': if item.args == 'year':
+1 -1
View File
@@ -650,7 +650,7 @@ def scrape(func):
if config.get_setting('trakt_sync'): if config.get_setting('trakt_sync'):
from core import trakt_tools from core import trakt_tools
trakt_tools.trakt_check(itemlist) trakt_tools.trakt_check(itemlist)
logger.debug('scraping time: ', time()-scrapingTime) logger.debug(item.channel + ' scraping time ' + ':', time()-scrapingTime)
return itemlist return itemlist
return wrapper return wrapper
+18 -3
View File
@@ -38,6 +38,8 @@ from threading import Thread
__version__ = '1.7.0.dev0' __version__ = '1.7.0.dev0'
import xbmc
major_version = sys.version_info[0] major_version = sys.version_info[0]
if major_version < 3: # py <= 2.x if major_version < 3: # py <= 2.x
if sys.version_info[1] < 5: # py <= 2.4 if sys.version_info[1] < 5: # py <= 2.4
@@ -172,6 +174,7 @@ class SqliteDict(DictClass):
self.encode = encode self.encode = encode
self.decode = decode self.decode = decode
self.timeout = timeout self.timeout = timeout
self.cache = {}
logger.info("opening Sqlite table %r in %r" % (tablename, filename)) logger.info("opening Sqlite table %r in %r" % (tablename, filename))
self.conn = self._new_conn() self.conn = self._new_conn()
@@ -234,7 +237,9 @@ class SqliteDict(DictClass):
def iteritems(self): def iteritems(self):
GET_ITEMS = 'SELECT key, value FROM "%s" ORDER BY rowid' % self.tablename GET_ITEMS = 'SELECT key, value FROM "%s" ORDER BY rowid' % self.tablename
for key, value in self.conn.select(GET_ITEMS): for key, value in self.conn.select(GET_ITEMS):
yield key, self.decode(value) ret = key, self.decode(value)
self.cache[key] = ret[1]
yield ret
def keys(self): def keys(self):
return self.iterkeys() if major_version > 2 else list(self.iterkeys()) return self.iterkeys() if major_version > 2 else list(self.iterkeys())
@@ -250,11 +255,15 @@ class SqliteDict(DictClass):
return self.conn.select_one(HAS_ITEM, (key,)) is not None return self.conn.select_one(HAS_ITEM, (key,)) is not None
def __getitem__(self, key): def __getitem__(self, key):
if key in self.cache.keys():
return self.cache[key]
GET_ITEM = 'SELECT value FROM "%s" WHERE key = ?' % self.tablename GET_ITEM = 'SELECT value FROM "%s" WHERE key = ?' % self.tablename
item = self.conn.select_one(GET_ITEM, (key,)) item = self.conn.select_one(GET_ITEM, (key,))
if item is None: if item is None:
raise KeyError(key) raise KeyError(key)
return self.decode(item[0]) ret = self.decode(item[0])
self.cache[key] = ret
return ret
def __setitem__(self, key, value): def __setitem__(self, key, value):
if self.flag == 'r': if self.flag == 'r':
@@ -264,6 +273,7 @@ class SqliteDict(DictClass):
self.conn.execute(ADD_ITEM, (key, self.encode(value))) self.conn.execute(ADD_ITEM, (key, self.encode(value)))
if self.autocommit: if self.autocommit:
self.commit() self.commit()
self.cache[key] = value
def __delitem__(self, key): def __delitem__(self, key):
if self.flag == 'r': if self.flag == 'r':
@@ -275,6 +285,7 @@ class SqliteDict(DictClass):
self.conn.execute(DEL_ITEM, (key,)) self.conn.execute(DEL_ITEM, (key,))
if self.autocommit: if self.autocommit:
self.commit() self.commit()
del self.cache[key]
def update(self, items=(), **kwds): def update(self, items=(), **kwds):
if self.flag == 'r': if self.flag == 'r':
@@ -292,6 +303,7 @@ class SqliteDict(DictClass):
self.update(kwds) self.update(kwds)
if self.autocommit: if self.autocommit:
self.commit() self.commit()
self.cache.update(items)
def __iter__(self): def __iter__(self):
return self.iterkeys() return self.iterkeys()
@@ -305,6 +317,7 @@ class SqliteDict(DictClass):
self.conn.commit() self.conn.commit()
self.conn.execute(CLEAR_ALL) self.conn.execute(CLEAR_ALL)
self.conn.commit() self.conn.commit()
self.cache = {}
@staticmethod @staticmethod
def get_tablenames(filename): def get_tablenames(filename):
@@ -403,6 +416,8 @@ class SqliteMultithread(Thread):
self.log = logging.getLogger('sqlitedict.SqliteMultithread') self.log = logging.getLogger('sqlitedict.SqliteMultithread')
self.start() self.start()
self.kodi_monitor = xbmc.Monitor()
def run(self): def run(self):
try: try:
if self.autocommit: if self.autocommit:
@@ -428,7 +443,7 @@ class SqliteMultithread(Thread):
self._sqlitedict_thread_initialized = True self._sqlitedict_thread_initialized = True
res = None res = None
while True: while not self.kodi_monitor.abortRequested():
req, arg, res, outer_stack = self.reqs.get() req, arg, res, outer_stack = self.reqs.get()
if req == '--close--': if req == '--close--':
assert res, ('--close-- without return queue', res) assert res, ('--close-- without return queue', res)
+4
View File
@@ -318,8 +318,12 @@ def run_threaded(job_func, args):
def join_threads(): def join_threads():
logger.debug(threads)
for th in threads: for th in threads:
try:
th.join() th.join()
except:
logger.error(traceback.format_exc())
class AddonMonitor(xbmc.Monitor): class AddonMonitor(xbmc.Monitor):