replaces namespace fenrir with fenrirscreenreader
This commit is contained in:
87
src/fenrirscreenreader/core/processManager.py
Normal file
87
src/fenrirscreenreader/core/processManager.py
Normal file
@ -0,0 +1,87 @@
|
||||
#!/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Fenrir TTY screen reader
|
||||
# By Chrys, Storm Dragon, and contributers.
|
||||
|
||||
from fenrirscreenreader.core import debug
|
||||
from fenrirscreenreader.core.eventData import fenrirEventType
|
||||
import time
|
||||
from threading import Thread
|
||||
from multiprocessing import Process
|
||||
|
||||
class processManager():
|
||||
def __init__(self):
|
||||
self._Processes = []
|
||||
self._Threads = []
|
||||
def initialize(self, environment):
|
||||
self.env = environment
|
||||
self.running = self.env['runtime']['eventManager'].getRunning()
|
||||
self.addSimpleEventThread(fenrirEventType.HeartBeat, self.heartBeatTimer, multiprocess=True)
|
||||
def shutdown(self):
|
||||
self.terminateAllProcesses()
|
||||
|
||||
def terminateAllProcesses(self):
|
||||
for proc in self._Processes:
|
||||
try:
|
||||
proc.terminate()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
def heartBeatTimer(self, active):
|
||||
try:
|
||||
time.sleep(0.5)
|
||||
except:
|
||||
pass
|
||||
return time.time()
|
||||
def addCustomEventThread(self, function, pargs = None, multiprocess = False, runOnce = False):
|
||||
eventQueue = self.env['runtime']['eventManager'].getEventQueue()
|
||||
if multiprocess:
|
||||
t = Process(target=self.customEventWorkerThread, args=(eventQueue, function, pargs, runOnce))
|
||||
self._Processes.append(t)
|
||||
else:# thread not implemented yet
|
||||
t = Thread(target=self.customEventWorkerThread, args=(eventQueue, function, pargs, runOnce))
|
||||
self._Threads.append(t)
|
||||
t.start()
|
||||
|
||||
def addSimpleEventThread(self, event, function, pargs = None, multiprocess = False, runOnce = False):
|
||||
if multiprocess:
|
||||
t = Process(target=self.simpleEventWorkerThread, args=(event, function, pargs, runOnce))
|
||||
self._Processes.append(t)
|
||||
else:
|
||||
t = Thread(target=self.simpleEventWorkerThread, args=(event, function, pargs, runOnce))
|
||||
self._Threads.append(t)
|
||||
t.start()
|
||||
|
||||
def customEventWorkerThread(self, eventQueue, function, pargs = None, runOnce = False):
|
||||
#if not isinstance(eventQueue, Queue):
|
||||
# return
|
||||
if not callable(function):
|
||||
return
|
||||
while self.running.value:
|
||||
try:
|
||||
if pargs:
|
||||
function(self.running, eventQueue, pargs)
|
||||
else:
|
||||
function(self.running, eventQueue)
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('processManager:customEventWorkerThread:function():' + str(e),debug.debugLevel.ERROR)
|
||||
if runOnce:
|
||||
break
|
||||
|
||||
def simpleEventWorkerThread(self, event, function, pargs = None, runOnce = False):
|
||||
if not isinstance(event, fenrirEventType):
|
||||
return
|
||||
if not callable(function):
|
||||
return
|
||||
while self.running.value:
|
||||
Data = None
|
||||
try:
|
||||
if pargs:
|
||||
Data = function(self.running, pargs)
|
||||
else:
|
||||
Data = function(self.running)
|
||||
except Exception as e:
|
||||
self.env['runtime']['debug'].writeDebugOut('processManager:simpleEventWorkerThread:function():' + str(e),debug.debugLevel.ERROR)
|
||||
self.env['runtime']['eventManager'].putToEventQueue(event, Data)
|
||||
if runOnce:
|
||||
break
|
Reference in New Issue
Block a user