Skip to content

Commit 86f8055

Browse files
committed
Reduce threading use
Each `threading.Timer()` call creates and starts a new thread, which is quite expensive - at least on Windows. Replace it by simple `sublime.set_timeout()` also makes locking obsolete.
1 parent f0ddcd5 commit 86f8055

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

latextools/utils/cache.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -215,14 +215,12 @@ def __init__(self):
215215
self._disk_lock = threading.Lock()
216216
if not hasattr(self, "_write_lock"):
217217
self._write_lock = threading.Lock()
218-
if not hasattr(self, "_save_lock"):
219-
self._save_lock = threading.Lock()
220218
if not hasattr(self, "_objects"):
221219
self._objects = {}
222220
if not hasattr(self, "_dirty"):
223221
self._dirty = False
224222
if not hasattr(self, "_save_queue"):
225-
self._save_queue = []
223+
self._save_queue = 0
226224
if not hasattr(self, "_pool"):
227225
self._pool = ThreadPool(2)
228226

@@ -469,17 +467,16 @@ def _write(self, key, obj):
469467
raise CacheMiss()
470468

471469
def _schedule_save(self):
472-
with self._save_lock:
473-
self._save_queue.append(0)
474-
threading.Timer(0.5, self._debounce_save).start()
475-
476-
def _debounce_save(self):
477-
with self._save_lock:
478-
if len(self._save_queue) > 1:
479-
self._save_queue.pop()
470+
def _debounce():
471+
self._save_queue -= 1
472+
if self._save_queue > 0:
473+
sublime.set_timeout(_debounce, 1000)
480474
else:
481-
self._save_queue = []
482-
sublime.set_timeout(self.save_async, 0)
475+
self._save_queue = 0
476+
self.save_async()
477+
478+
self._save_queue += 1
479+
sublime.set_timeout(_debounce, 1000)
483480

484481
# ensure cache is saved to disk when removed from memory
485482
def __del__(self):

0 commit comments

Comments
 (0)