def main(cls): """ The main method used to bootstrap the :class:`Worker` when it is being executed. It is enough for the module to define:: if __name__ == '__main__': Worker.main() .. note:: It is critical that subclasses check if they are executing in the ``__main__`` module, before running :meth:`main`, as the worker module is also generally imported on the client side. """ try: sys.stdin = NonBlockingInput(sys.stdin, timeout=600) sys.stdout = sys.stderr = MessageWriter(cls) cls.send('WORKER', {'pid': os.getpid(), 'version': "1.0"}) task = cls.get_task() job, jobargs = task.jobobjs job.worker.start(task, job, **jobargs) cls.send('DONE') except (DataError, EnvironmentError, MemoryError) as e: # check the number of open file descriptors (under proc), warn if close to max # http://stackoverflow.com/questions/899038/getting-the-highest-allocated-file-descriptor # also check for other known reasons for error, such as if disk is full cls.send('ERROR', traceback.format_exc()) raise except Exception as e: cls.send('FATAL', force_utf8(traceback.format_exc())) raise
def write(self, string): string = string.strip() if string: self.worker.send('MSG', force_utf8(string))