Fix SQLite concurrency errors
This commit is contained in:
parent
84c39f3baa
commit
61c72ac3ea
2 changed files with 12 additions and 10 deletions
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue