def join(self, deadline=None, timefunc=time.time): if deadline is None: rc = self.p.wait() else: interval = .5 while True: rc = self.p.poll() if rc != None: break if timefunc() >= deadline: log.warning("(%d %s) sandbox killing instance due to deadline" % (self.i, self.role)) self.p.kill() time.sleep(interval) else: return True if rc != 0: client = RPCClient(self.endpoint) if rc == -9: desc = "Time limit reached" else: desc = "Sandbox exited with return code %d" % (rc,) client.report_stop(True, desc) # If sandbox instance exited normally, it should have reported # the stop itself. return False
def setUp(self): endpoint = 'tcp://127.0.0.1:50000' self.server = MockGameRPCServer(timeout=.5, endpoint=endpoint) self.server.start() self.client = RPCClient(endpoint)
def run(cls): args_json = sys.argv[1] args = json.loads(args_json) logging.basicConfig(level=args['loglevel'], format="<SB>%(levelname)s:%(name)s:%(message)s") logging.getLogger('jsonrpc2_zeromq').setLevel(logging.WARNING) log.info("(%d %s) sandbox starting" % (args['i'], args['role'])) client = RPCClient(args['endpoint']) name = os.path.basename(args['path']) name = re.sub("\.py$", "", name) try: mod = imp.load_source(name, args['path']) except: log.warning("(%d %s) exception on import" % (args['i'], args['role'])) desc = traceback.format_exc() client.report_stop(True, desc) else: if args['role'] == 'dst': try: cls = mod.Destination except AttributeError: cls = mod.Receiver else: try: cls = mod.Source except AttributeError: cls = mod.Transmitter ins = cls(args['i'], args['role'], args['update_interval']) ins._start(client) log.info("(%d %s) sandbox stopping" % (args['i'], args['role']))
def start(self, endpoint): client = RPCClient(endpoint) self.thread = threading.Thread(target=self.ins._start, args=(client,)) self.thread.start()