async def start(self, **kwargs): await super().start(**kwargs) while (await self.describe_pod()).status.phase == "Pending": await asyncio.sleep(0.1) while self.address is None: logs = await self.logs() for line in logs.splitlines(): if "Scheduler at:" in line: self.address = line.split("Scheduler at:")[1].strip() await asyncio.sleep(0.1) self.service = await self._create_service() self.address = "tcp://{name}.{namespace}:{port}".format( name=self.service.metadata.name, namespace=self.namespace, port=SCHEDULER_PORT, ) if self.service.spec.type == "LoadBalancer": # Wait for load balancer to be assigned start = time.time() while self.service.status.load_balancer.ingress is None: if time.time() > start + 30: raise TimeoutError( "Timed out waiting for Load Balancer to be provisioned." ) self.service = await self.core_api.read_namespaced_service( self.cluster_name, self.namespace) await asyncio.sleep(0.2) [loadbalancer_ingress] = self.service.status.load_balancer.ingress loadbalancer_host = loadbalancer_ingress.hostname or loadbalancer_ingress.ip self.external_address = "tcp://{host}:{port}".format( host=loadbalancer_host, port=SCHEDULER_PORT)
def run_cell_remote(ip, kc, cell): """Run a cell on a KernelClient Any output from the cell will be redisplayed in the local session. """ msg_id = kc.execute(cell) in_kernel = getattr(ip, "kernel", False) if in_kernel: socket = ip.display_pub.pub_socket session = ip.display_pub.session parent_header = ip.display_pub.parent_header while True: try: msg = kc.get_iopub_msg(timeout=OUTPUT_TIMEOUT) except queue.Empty: raise TimeoutError("Timeout waiting for IPython output") if msg["parent_header"].get("msg_id") != msg_id: continue msg_type = msg["header"]["msg_type"] content = msg["content"] if msg_type == "status": if content["execution_state"] == "idle": # idle means output is done break elif msg_type == "stream": stream = getattr(sys, content["name"]) stream.write(content["text"]) elif msg_type in ("display_data", "execute_result", "error"): if in_kernel: session.send(socket, msg_type, content, parent=parent_header) else: if msg_type == "error": print("\n".join(content["traceback"]), file=sys.stderr) else: sys.stdout.write(content["data"].get("text/plain", "")) else: pass
def run_cell_remote(ip, kc, cell): """Run a cell on a KernelClient Any output from the cell will be redisplayed in the local session. """ msg_id = kc.execute(cell) in_kernel = getattr(ip, 'kernel', False) if in_kernel: socket = ip.display_pub.pub_socket session = ip.display_pub.session parent_header = ip.display_pub.parent_header while True: try: msg = kc.get_iopub_msg(timeout=OUTPUT_TIMEOUT) except queue.Empty: raise TimeoutError("Timeout waiting for IPython output") if msg['parent_header'].get('msg_id') != msg_id: continue msg_type = msg['header']['msg_type'] content = msg['content'] if msg_type == 'status': if content['execution_state'] == 'idle': # idle means output is done break elif msg_type == 'stream': stream = getattr(sys, content['name']) stream.write(content['text']) elif msg_type in ('display_data', 'execute_result', 'error'): if in_kernel: session.send(socket, msg_type, content, parent=parent_header) else: if msg_type == 'error': print('\n'.join(content['traceback']), file=sys.stderr) else: sys.stdout.write(content['data'].get('text/plain', '')) else: pass
def on_connect_timeout(self): if not self.future.done(): self.future.set_exception(TimeoutError()) self.close_streams()