Beispiel #1
0
    def __init__(self):
        """
        Initialize render server
        """

        SignalThread.__init__(self, name='RenderServerThread')

        self.daemon = True
        self.stop_flag = False

        self.jobs_lock = threading.Lock()
        self.nodes_lock = threading.Lock()

        # Store both of list and dict to be able:
        #   1. Review nodes/jobs in order they were registered
        #   2. Get plain lists fast for web-unterface
        #   3. Fast accessing by UUID
        #   4. Use priorited jobs
        #
        # Fill free to use something smarter ;)
        self.nodes = []
        self.nodes_hash = {}

        self.jobs = []
        self.jobs_hash = {}

        # list of fully completed jobs
        self.completed_jobs = []

        self.prepareStorage()
Beispiel #2
0
    def __init__(self):
        QObject.__init__(self, None)
        self._mainthreadid = QThread.currentThreadId()

        self._signalthread = SignalThread()
        QObject.connect(self._signalthread, SIGNAL("triggerSignal()"),
                        self.sensorQueueChanged)

        self._idletimer = QTimer()
        self._delaytimer = QTimer()
        self._timerqueuetimer = QTimer()

        self._idletimer.setSingleShot(True)
        self._delaytimer.setSingleShot(True)
        self._timerqueuetimer.setSingleShot(True)

        self.connect(self._idletimer, SIGNAL("timeout()"), self.idleTimeout)
        self.connect(self._delaytimer, SIGNAL("timeout()"), self.delayTimeout)
        self.connect(self._timerqueuetimer, SIGNAL("timeout()"),
                     self.timerQueueTimeout)

        SoDB.getSensorManager().setChangedCallback(self.sensorQueueChangedCB,
                                                   self)
        SoDB.setRealTimeInterval(1.0 / 25.0)
        SoRenderManager.enableRealTimeUpdate(False)
Beispiel #3
0
    def __init__(self):
        """
        Initialize render server
        """

        SignalThread.__init__(self, name="RenderServerThread")

        self.daemon = True
        self.stop_flag = False

        self.jobs_lock = threading.Lock()
        self.nodes_lock = threading.Lock()

        # Store both of list and dict to be able:
        #   1. Review nodes/jobs in order they were registered
        #   2. Get plain lists fast for web-unterface
        #   3. Fast accessing by UUID
        #   4. Use priorited jobs
        #
        # Fill free to use something smarter ;)
        self.nodes = []
        self.nodes_hash = {}

        self.jobs = []
        self.jobs_hash = {}

        # list of fully completed jobs
        self.completed_jobs = []

        self.prepareStorage()
Beispiel #4
0
    def __init__(self, node):
        """
        Initialize sender
        """

        SignalThread.__init__(self, name='LogSenderThread')

        self.buffer = ''
        self.buffer_lock = threading.Lock()
        self.stop_flag = False

        self.node = node
Beispiel #5
0
    def __init__(self, node):
        """
        Initialize sender
        """

        SignalThread.__init__(self, name='TaskSenderThread')

        self.tasks = []
        self.stop_flag = False
        self.task_lock = threading.Lock()

        self.node = node
Beispiel #6
0
    def __init__(self, node):
        """
        Initialize sender
        """

        SignalThread.__init__(self, name='TaskSenderThread')

        self.tasks = []
        self.stop_flag = False
        self.task_lock = threading.Lock()

        self.node = node
Beispiel #7
0
    def __init__(self, node):
        """
        Initialize sender
        """

        SignalThread.__init__(self, name='LogSenderThread')

        self.buffer = ''
        self.buffer_lock = threading.Lock()
        self.stop_flag = False

        self.node = node
Beispiel #8
0
    def __init__(self):
        """
        Initialize render node
        """

        SignalThread.__init__(self, name='RenderNodeThread')

        self.stop_flag = False
        self.uuid = None
        self.currentTask = None
        self.host_info = self.collectHostInfo()

        self.taskSender = TaskSender(self)
Beispiel #9
0
    def __init__(self, address):
        """
        Initialize XML-RPC server
        """

        SignalThread.__init__(self, name='XMLRPCServerThread')
        xmlrpc.server.SimpleXMLRPCServer.__init__(self, address,
            XMLRPCRequestHandler)

        self.handlers = XMLRPCHandlers()
        self.register_instance(self.handlers)
        self.address = address
        self.allow_dotted_names = True
        self.stop_flag = False

        self.register_function(lambda client_info: 'OK', 'ping')
Beispiel #10
0
    def __init__(self, address):
        """
        Initialize stoppable HTTP server for renderfarm
        """

        http.server.HTTPServer.__init__(self, address, HTTPRequestHandler)
        SignalThread.__init__(self, name='HTTPServerThread')

        self.daemon = True

        self.address = address
        self.stop_flag = False

        program_startup = os.path.abspath(os.path.dirname(sys.argv[0]))

        fpath = os.path.join(program_startup, 'web')
        self.site_root = os.path.realpath(fpath)
Beispiel #11
0
    def __init__(self, options):
        """
        Initialize task
        """

        SignalThread.__init__(self, name='RenderTaskThread')

        self.jobUUID = options['jobUUID']
        self.task = options['task']
        self.options = options

        # Runtime calculated fields
        self.fpath = None
        self.output_fpath = None
        self.pipe = None

        self.finishFlag = False
        self.errorFlag = False

        self.environ = spawnNewEnviron(options)
Beispiel #12
0
    def __init__(self, options):
        """
        Initialize task
        """

        SignalThread.__init__(self, name='RenderTaskThread')

        self.jobUUID = options['jobUUID']
        self.task = options['task']
        self.options = options

        # Runtime calculated fields
        self.fpath = None
        self.output_fpath = None
        self.pipe = None

        self.finishFlag = False
        self.errorFlag = False

        self.environ = spawnNewEnviron(options)
Beispiel #13
0
    def __init__(self):
        QObject.__init__(self, None)
        self._mainthreadid = QThread.currentThreadId()

        self._signalthread = SignalThread()
        QObject.connect(self._signalthread, SIGNAL("triggerSignal()"),
                        self.sensorQueueChanged)

        self._idletimer = QTimer()
        self._delaytimer = QTimer()
        self._timerqueuetimer = QTimer()

        self._idletimer.setSingleShot(True)
        self._delaytimer.setSingleShot(True)
        self._timerqueuetimer.setSingleShot(True)

        self.connect(self._idletimer, SIGNAL("timeout()"), self.idleTimeout)
        self.connect(self._delaytimer, SIGNAL("timeout()"), self.delayTimeout)
        self.connect(self._timerqueuetimer, SIGNAL("timeout()"), self.timerQueueTimeout)

        SoDB.getSensorManager().setChangedCallback(self.sensorQueueChangedCB, self)
        SoDB.setRealTimeInterval(1.0 / 25.0)
        SoRenderManager.enableRealTimeUpdate(False)
Beispiel #14
0
class SensorManager(QObject):
    def __init__(self):
        QObject.__init__(self, None)
        self._mainthreadid = QThread.currentThreadId()

        self._signalthread = SignalThread()
        QObject.connect(self._signalthread, SIGNAL("triggerSignal()"),
                        self.sensorQueueChanged)

        self._idletimer = QTimer()
        self._delaytimer = QTimer()
        self._timerqueuetimer = QTimer()

        self._idletimer.setSingleShot(True)
        self._delaytimer.setSingleShot(True)
        self._timerqueuetimer.setSingleShot(True)

        self.connect(self._idletimer, SIGNAL("timeout()"), self.idleTimeout)
        self.connect(self._delaytimer, SIGNAL("timeout()"), self.delayTimeout)
        self.connect(self._timerqueuetimer, SIGNAL("timeout()"),
                     self.timerQueueTimeout)

        SoDB.getSensorManager().setChangedCallback(self.sensorQueueChangedCB,
                                                   self)
        SoDB.setRealTimeInterval(1.0 / 25.0)
        SoRenderManager.enableRealTimeUpdate(False)

    def __del__(self):
        SoDB.getSensorManager().setChangedCallback(None, None)

        if self._signalthread.isRunning():
            self._signalthread.stopThread()
            self._signalthread.wait()

    def sensorQueueChangedCB(self, closure):
        # if we get a callback from another thread, route the callback
        # through SignalThread so that we receive the callback in the
        # QApplication thread (needed since QTimer isn't thread safe)
        if QThread.currentThreadId() != closure._mainthreadid:
            if not closure._signalthread.isRunning():
                closure._signalthread.start()
            self._signalthread.trigger()
        else:
            self.sensorQueueChanged()

    def sensorQueueChanged(self):
        sensormanager = SoDB.getSensorManager()
        assert (sensormanager)

        interval = sensormanager.isTimerSensorPending()

        if interval:
            interval -= SbTime.getTimeOfDay()

            if interval.getValue() <= 0.0:
                interval.setValue(1.0 / 5000.0)

            if not self._timerqueuetimer.isActive():
                # FIXME jkg: frodo changed this to time.getMsecValue() in C++ Quarter. test and apply.
                self._timerqueuetimer.start(interval.getMsecValue())
            else:
                self._timerqueuetimer.setInterval(interval.getMsecValue())
        elif self._timerqueuetimer.isActive():
            self._timerqueuetimer.stop()

        if sensormanager.isDelaySensorPending():
            self._idletimer.start(0)

            if not self._delaytimer.isActive():
                time = SoDB.getDelaySensorTimeout()

                if time != SbTime.zero():
                    self._delaytimer.start(interval.getMsecValue())
            else:
                if self._idletimer.isActive():
                    self._idletimer.stop()

                if self._delaytimer.isActive():
                    self._delaytimer.stop()

    def idleTimeout(self):
        SoDB.getSensorManager().processTimerQueue()
        SoDB.getSensorManager().processDelayQueue(True)
        self.sensorQueueChanged()

    def timerQueueTimeout(self):
        SoDB.getSensorManager().processTimerQueue()
        self.sensorQueueChanged()

    def delayTimeout(self):
        SoDB.getSensorManager().processTimerQueue()
        SoDB.getSensorManager().processDelayQueue(False)
        self.sensorQueueChanged()
Beispiel #15
0
class SensorManager(QObject):

    def __init__(self):
        QObject.__init__(self, None)
        self._mainthreadid = QThread.currentThreadId()

        self._signalthread = SignalThread()
        QObject.connect(self._signalthread, SIGNAL("triggerSignal()"),
                        self.sensorQueueChanged)

        self._idletimer = QTimer()
        self._delaytimer = QTimer()
        self._timerqueuetimer = QTimer()

        self._idletimer.setSingleShot(True)
        self._delaytimer.setSingleShot(True)
        self._timerqueuetimer.setSingleShot(True)

        self.connect(self._idletimer, SIGNAL("timeout()"), self.idleTimeout)
        self.connect(self._delaytimer, SIGNAL("timeout()"), self.delayTimeout)
        self.connect(self._timerqueuetimer, SIGNAL("timeout()"), self.timerQueueTimeout)

        SoDB.getSensorManager().setChangedCallback(self.sensorQueueChangedCB, self)
        SoDB.setRealTimeInterval(1.0 / 25.0)
        SoRenderManager.enableRealTimeUpdate(False)

    def __del__(self):
        SoDB.getSensorManager().setChangedCallback(None, None)

        if self._signalthread.isRunning():
            self._signalthread.stopThread()
            self._signalthread.wait()

    def sensorQueueChangedCB(self, closure):
        # if we get a callback from another thread, route the callback
        # through SignalThread so that we receive the callback in the
        # QApplication thread (needed since QTimer isn't thread safe)
        if QThread.currentThreadId() != closure._mainthreadid:
            if not closure._signalthread.isRunning():
                closure._signalthread.start()
            self._signalthread.trigger()
        else:
            self.sensorQueueChanged()

    def sensorQueueChanged(self):
        sensormanager = SoDB.getSensorManager()
        assert(sensormanager)

        interval = sensormanager.isTimerSensorPending()

        if interval:
            interval -= SbTime.getTimeOfDay()

            if interval.getValue() <= 0.0:
                interval.setValue(1.0/5000.0)

            if not self._timerqueuetimer.isActive():
                # FIXME jkg: frodo changed this to time.getMsecValue() in C++ Quarter. test and apply.
                self._timerqueuetimer.start(interval.getMsecValue())
            else:
                self._timerqueuetimer.setInterval(interval.getMsecValue())
        elif self._timerqueuetimer.isActive():
            self._timerqueuetimer.stop()


        if sensormanager.isDelaySensorPending():
            self._idletimer.start(0)

            if not self._delaytimer.isActive():
                time = SoDB.getDelaySensorTimeout()

                if time != SbTime.zero():
                    self._delaytimer.start(interval.getMsecValue())
            else:
                if self._idletimer.isActive():
                    self._idletimer.stop()

                if self._delaytimer.isActive():
                    self._delaytimer.stop()

    def idleTimeout(self):
        SoDB.getSensorManager().processTimerQueue()
        SoDB.getSensorManager().processDelayQueue(True)
        self.sensorQueueChanged()

    def timerQueueTimeout(self):
        SoDB.getSensorManager().processTimerQueue()
        self.sensorQueueChanged()

    def delayTimeout(self):
        SoDB.getSensorManager().processTimerQueue()
        SoDB.getSensorManager().processDelayQueue(False)
        self.sensorQueueChanged()