##// END OF EJS Templates
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported

File last commit:

r1167:1f521b07c958
r1287:af11e4aac00c
Show More
controller_api.py
178 lines | 3.7 KiB | text/x-python | PythonLexer
import threading
from queue import Queue
from schainpy.controller import Project
from schainpy.model.graphics.jroplotter import PlotManager
class ControllerThread(threading.Thread, Project):
def __init__(self, plotter_queue=None):
threading.Thread.__init__(self)
Project.__init__(self, plotter_queue)
self.setDaemon(True)
self.lock = threading.Lock()
self.control = { 'stop':False, 'pause':False }
def __del__(self):
self.control['stop'] = True
def stop(self):
self.lock.acquire()
self.control['stop'] = True
self.lock.release()
def pause(self):
self.lock.acquire()
self.control['pause'] = not(self.control['pause'])
paused = self.control['pause']
self.lock.release()
return paused
def isPaused(self):
self.lock.acquire()
paused = self.control['pause']
self.lock.release()
return paused
def isStopped(self):
self.lock.acquire()
stopped = self.control['stop']
self.lock.release()
return stopped
def run(self):
self.control['stop'] = False
self.control['pause'] = False
self.writeXml()
self.createObjects()
self.connectObjects()
Project.run(self)
def isRunning(self):
return self.is_alive()
def isFinished(self):
return not self.is_alive()
def setPlotters(self):
plotterList = PlotManager.plotterList
for thisPUConfObj in list(self.procUnitConfObjDict.values()):
inputId = thisPUConfObj.getInputId()
if int(inputId) == 0:
continue
for thisOpObj in thisPUConfObj.getOperationObjList():
if thisOpObj.type == "self":
continue
if thisOpObj.name in plotterList:
thisOpObj.type = "other"
def setPlotterQueue(self, plotter_queue):
self.plotterQueue = plotter_queue
def getPlotterQueue(self):
return self.plotterQueue
def useExternalPlotter(self):
self.plotterQueue = Queue(10)
self.setPlotters()
plotManagerObj = PlotManager(self.plotterQueue)
plotManagerObj.setController(self)
return plotManagerObj
# from PyQt4 import QtCore
# from PyQt4.QtCore import SIGNAL
#
# class ControllerQThread(QtCore.QThread, Project):
#
# def __init__(self, filename):
#
# QtCore.QThread.__init__(self)
# Project.__init__(self)
#
# self.filename = filename
#
# self.lock = threading.Lock()
# self.control = {'stop':False, 'pause':False}
#
# def __del__(self):
#
# self.control['stop'] = True
# self.wait()
#
# def stop(self):
#
# self.lock.acquire()
#
# self.control['stop'] = True
#
# self.lock.release()
#
# def pause(self):
#
# self.lock.acquire()
#
# self.control['pause'] = not(self.control['pause'])
# paused = self.control['pause']
#
# self.lock.release()
#
# return paused
#
# def isPaused(self):
#
# self.lock.acquire()
# paused = self.control['pause']
# self.lock.release()
#
# return paused
#
# def isStopped(self):
#
# self.lock.acquire()
# stopped = self.control['stop']
# self.lock.release()
#
# return stopped
#
# def run(self):
#
# self.control['stop'] = False
# self.control['pause'] = False
#
# self.readXml(self.filename)
# self.createObjects()
# self.connectObjects()
# self.emit( SIGNAL( "jobStarted( PyQt_PyObject )" ), 1)
# Project.run(self)
# self.emit( SIGNAL( "jobFinished( PyQt_PyObject )" ), 1)
#