refs #2554 wait for zombies

pull/51/head
Natalia Serrano 2025-07-31 10:34:01 +02:00
parent ee183f6ad3
commit e783d7c1fa
1 changed files with 15 additions and 10 deletions

View File

@ -35,6 +35,7 @@ import re
import time
try: import dbus ## don't fail on windows (the worker will later refuse to load anyway)
except: pass
import select
import random
import subprocess
import threading
@ -292,22 +293,26 @@ class ogLiveWorker(ServerWorker):
pass
sout = serr = ''
poll_iterations = 1
while p.poll() is None:
for l in iter (p.stdout.readline, b''):
finished = False
while True:
try:
p.wait (0.05)
finished = True
except subprocess.TimeoutExpired:
pass
ready_to_read, _, _ = select.select ([p.stdout, p.stderr], [], [], 0.2)
if p.stdout in ready_to_read:
l = p.stdout.readline()
partial = l.decode ('utf-8', 'ignore')
if self.stdout_q: self.stdout_q.put (partial)
sout += partial
for l in iter (p.stderr.readline, b''):
if p.stderr in ready_to_read:
l = p.stderr.readline()
partial = l.decode ('utf-8', 'ignore')
serr += partial
## poll quickly at first, then poll less frequently
if poll_iterations > 15: sleep_time = 1
elif poll_iterations > 10: sleep_time = 0.2
else: sleep_time = 0.1
time.sleep (sleep_time)
poll_iterations += 1
if finished: break
sout = sout.strip()
serr = serr.strip()