From 91fe6ad3e9280ef9ca4c64d662f3dfd5baf73fb8 Mon Sep 17 00:00:00 2001 From: "Jeremy Pallats/starcraft.man" Date: Thu, 17 Sep 2015 19:16:39 -0400 Subject: [PATCH] Join a thread instead of sleeping. * Instead of having a fixed sleep duration, start a thread that monitors the subprocess. * Started thread is joined, if process finishes thread returns before timeout. * Should increase speed and reduce overhead on CPU. --- plug.vim | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/plug.vim b/plug.vim index e21e8dc..edf9552 100644 --- a/plug.vim +++ b/plug.vim @@ -1182,6 +1182,17 @@ class Command(object): self.proc = subprocess.Popen(self.cmd, cwd=self.cmd_dir, stdout=tfile, stderr=subprocess.STDOUT, shell=True, preexec_fn=os.setsid) + thrd = thr.Thread(target=(lambda proc: proc.wait()), args=(self.proc,)) + thrd.start() + + thread_not_started = True + while thread_not_started: + try: + thrd.join(0.1) + thread_not_started = False + except RuntimeError: + pass + while self.alive: if G_STOP.is_set(): raise KeyboardInterrupt @@ -1196,7 +1207,7 @@ class Command(object): if time_diff > self.timeout: raise CmdTimedOut(['Timeout!']) - time.sleep(0.33) + thrd.join(0.5) tfile.seek(0) result = [line.decode('utf-8', 'replace').rstrip() for line in tfile]