Fix SQLite concurrency errors

This commit is contained in:
shortcutme 2019-03-18 03:36:12 +01:00
parent 84c39f3baa
commit 61c72ac3ea
No known key found for this signature in database
GPG Key ID: 5B63BAE6CB9613AE
2 changed files with 12 additions and 10 deletions

View File

@ -56,6 +56,7 @@ class Db(object):
self.schema["version"] = self.schema.get("version", 1)
self.conn = None
self.cur = None
self.progress_sleeping = False
self.log = logging.getLogger("Db:%s" % schema["db_name"])
self.table_names = None
self.collect_stats = False
@ -92,7 +93,9 @@ class Db(object):
)
def progress(self, *args, **kwargs):
gevent.sleep()
self.progress_sleeping = True
time.sleep(0.001)
self.progress_sleeping = False
# Execute query using dbcursor
def execute(self, query, params=None):
@ -101,6 +104,10 @@ class Db(object):
return self.cur.execute(query, params)
def commit(self, reason="Unknown"):
if self.progress_sleeping:
self.log.debug("Commit ignored: Progress sleeping")
return False
try:
s = time.time()
self.conn.commit()

View File

@ -84,16 +84,11 @@ class DbCursor:
def execute(self, query, params=None):
query = query.strip()
while self.db.progress_sleeping:
time.sleep(0.1)
self.db.last_query_time = time.time()
if time.time() - self.db.last_sleep_time > 0.1:
if self.db.num_execute_since_sleep > 100:
gevent.sleep(0.001)
self.db.num_execute_since_sleep = 0
self.db.last_sleep_time = time.time()
self.db.num_execute_since_sleep += 1
query, params = self.parseQuery(query, params)
s = time.time()
@ -128,7 +123,7 @@ class DbCursor:
params = query_sets
params.update(query_wheres)
self.cursor.execute(
self.execute(
"UPDATE %s SET %s WHERE %s" % (table, ", ".join(sql_sets), " AND ".join(sql_wheres)),
params
)