def execute(self): # TODO: Timeout concerns self.lock.acquire() # TODO: this can break in various ways on bad input task_type = wire.read_string(self.shmem) try: klass = _task_registry[task_type] task = klass(self.shmem) task.run() except: self.shmem.seek(0) # XXX: Failure indicator wire.write_uint8(self.shmem, 0) tb = traceback.format_exc() # HACK: Traceback string must be truncated so it will fit in the # shared memory (along with the uint32 length prefix) if len(tb) + 5 > len(self.shmem): tb = tb[:len(self.shmem) - 5] wire.write_string(self.shmem, tb) finally: self.lock.release()
def _write_response(self, agg_inst): self.shmem.seek(0) self.mark_success() serialized_inst = compat.pickle_dump(agg_inst) wire.write_string(self.shmem, serialized_inst)
def run(self): self.shmem.seek(0) self.mark_success() wire.write_string(self.shmem, 'pong')