Преглед на файлове

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.
Jeremy Pallats/starcraft.man преди 10 години
родител
ревизия
91fe6ad3e9
променени са 1 файла, в които са добавени 12 реда и са изтрити 1 реда
  1. 12 1
      plug.vim

+ 12 - 1
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]