improve termination of threads
This commit is contained in:
parent
f01583b13c
commit
d2cc7192b3
@ -19,7 +19,7 @@ class fenrirManager():
|
|||||||
if not cliArgs:
|
if not cliArgs:
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
self.environment = settingsManager.settingsManager().initFenrirConfig(cliArgs, self)
|
self.environment = settingsManager.settingsManager().initFenrirConfig(cliArgs, self)
|
||||||
if not self.environment:
|
if not self.environment:
|
||||||
raise RuntimeError('Cannot Initialize. Maybe the configfile is not available or not parseable')
|
raise RuntimeError('Cannot Initialize. Maybe the configfile is not available or not parseable')
|
||||||
except RuntimeError:
|
except RuntimeError:
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
from fenrirscreenreader.core import debug
|
from fenrirscreenreader.core import debug
|
||||||
from fenrirscreenreader.core.eventData import fenrirEventType
|
from fenrirscreenreader.core.eventData import fenrirEventType
|
||||||
import time
|
import time, signal
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from multiprocessing import Process
|
from multiprocessing import Process
|
||||||
|
|
||||||
@ -25,8 +25,13 @@ class processManager():
|
|||||||
for proc in self._Processes:
|
for proc in self._Processes:
|
||||||
try:
|
try:
|
||||||
proc.terminate()
|
proc.terminate()
|
||||||
except Exception as e:
|
except KeyboardInterrupt:
|
||||||
print(e)
|
pass
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
proc.join()
|
||||||
|
for t in self._Threads:
|
||||||
|
t.join()
|
||||||
def heartBeatTimer(self, active):
|
def heartBeatTimer(self, active):
|
||||||
try:
|
try:
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
@ -35,6 +40,7 @@ class processManager():
|
|||||||
return time.time()
|
return time.time()
|
||||||
def addCustomEventThread(self, function, pargs = None, multiprocess = False, runOnce = False):
|
def addCustomEventThread(self, function, pargs = None, multiprocess = False, runOnce = False):
|
||||||
eventQueue = self.env['runtime']['eventManager'].getEventQueue()
|
eventQueue = self.env['runtime']['eventManager'].getEventQueue()
|
||||||
|
original_sigint_handler = signal.signal(signal.SIGINT, signal.SIG_IGN)
|
||||||
if multiprocess:
|
if multiprocess:
|
||||||
t = Process(target=self.customEventWorkerThread, args=(eventQueue, function, pargs, runOnce))
|
t = Process(target=self.customEventWorkerThread, args=(eventQueue, function, pargs, runOnce))
|
||||||
self._Processes.append(t)
|
self._Processes.append(t)
|
||||||
@ -42,8 +48,9 @@ class processManager():
|
|||||||
t = Thread(target=self.customEventWorkerThread, args=(eventQueue, function, pargs, runOnce))
|
t = Thread(target=self.customEventWorkerThread, args=(eventQueue, function, pargs, runOnce))
|
||||||
self._Threads.append(t)
|
self._Threads.append(t)
|
||||||
t.start()
|
t.start()
|
||||||
|
signal.signal(signal.SIGINT, original_sigint_handler)
|
||||||
def addSimpleEventThread(self, event, function, pargs = None, multiprocess = False, runOnce = False):
|
def addSimpleEventThread(self, event, function, pargs = None, multiprocess = False, runOnce = False):
|
||||||
|
original_sigint_handler = signal.signal(signal.SIGINT, signal.SIG_IGN)
|
||||||
if multiprocess:
|
if multiprocess:
|
||||||
t = Process(target=self.simpleEventWorkerThread, args=(event, function, pargs, runOnce))
|
t = Process(target=self.simpleEventWorkerThread, args=(event, function, pargs, runOnce))
|
||||||
self._Processes.append(t)
|
self._Processes.append(t)
|
||||||
@ -51,7 +58,7 @@ class processManager():
|
|||||||
t = Thread(target=self.simpleEventWorkerThread, args=(event, function, pargs, runOnce))
|
t = Thread(target=self.simpleEventWorkerThread, args=(event, function, pargs, runOnce))
|
||||||
self._Threads.append(t)
|
self._Threads.append(t)
|
||||||
t.start()
|
t.start()
|
||||||
|
signal.signal(signal.SIGINT, original_sigint_handler)
|
||||||
def customEventWorkerThread(self, eventQueue, function, pargs = None, runOnce = False):
|
def customEventWorkerThread(self, eventQueue, function, pargs = None, runOnce = False):
|
||||||
#if not isinstance(eventQueue, Queue):
|
#if not isinstance(eventQueue, Queue):
|
||||||
# return
|
# return
|
||||||
|
@ -57,7 +57,7 @@ class driver(screenDriver):
|
|||||||
signal.signal(signal.SIGWINCH, self.handleSigwinch)
|
signal.signal(signal.SIGWINCH, self.handleSigwinch)
|
||||||
def initialize(self, environment):
|
def initialize(self, environment):
|
||||||
self.env = environment
|
self.env = environment
|
||||||
self.env['runtime']['processManager'].addCustomEventThread(self.terminalEmulation)
|
self.env['runtime']['processManager'].addCustomEventThread(self.terminalEmulation)
|
||||||
def getCurrScreen(self):
|
def getCurrScreen(self):
|
||||||
self.env['screen']['oldTTY'] = '1'
|
self.env['screen']['oldTTY'] = '1'
|
||||||
self.env['screen']['newTTY'] = '1'
|
self.env['screen']['newTTY'] = '1'
|
||||||
|
@ -34,7 +34,7 @@ class driver(screenDriver):
|
|||||||
self.hichar = None
|
self.hichar = None
|
||||||
def initialize(self, environment):
|
def initialize(self, environment):
|
||||||
self.env = environment
|
self.env = environment
|
||||||
self.env['runtime']['processManager'].addCustomEventThread(self.updateWatchdog)
|
self.env['runtime']['processManager'].addCustomEventThread(self.updateWatchdog, multiprocess=True)
|
||||||
def getCurrScreen(self):
|
def getCurrScreen(self):
|
||||||
self.env['screen']['oldTTY'] = self.env['screen']['newTTY']
|
self.env['screen']['oldTTY'] = self.env['screen']['newTTY']
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user