Skip to content
This repository was archived by the owner on Feb 20, 2023. It is now read-only.

Commit 8855886

Browse files
rickyyxlinmagit
andauthored
Better command line interaction when ModelServerManager enabled (#1409)
Co-authored-by: Lin Ma <[email protected]>
1 parent 041fe8f commit 8855886

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

script/model/model_server.py

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from typing import Dict, Optional, Tuple, List, Any
2626
import json
2727
import logging
28+
import os
2829
import pprint
2930
import pickle
3031
from pathlib import Path
@@ -134,7 +135,10 @@ def __init__(self, end_point: str) -> ModelServer:
134135
logging.debug(
135136
f"Python model trying to connect to manager at {end_point}")
136137
self.socket.connect(f"ipc://{end_point}")
137-
logging.debug(f"Python model connected at {end_point}")
138+
logging.info(f"Python model connected at {end_point}")
139+
140+
# If the ModelServer is closing
141+
self._closing = False
138142

139143
# Register the exit callback
140144
atexit.register(self.cleanup_zmq)
@@ -331,6 +335,19 @@ def _infer(self, data: Dict) -> Tuple[List, bool, str]:
331335

332336
return y_pred.tolist(), True, ""
333337

338+
def _recv(self) -> str:
339+
"""
340+
Receive from the ZMQ socket. This is a blocking call.
341+
342+
:return: Message paylod
343+
"""
344+
identity = self.socket.recv()
345+
_delim = self.socket.recv()
346+
payload = self.socket.recv()
347+
logging.debug(f"Python recv: {str(identity)}, {str(payload)}")
348+
349+
return payload.decode("ascii")
350+
334351
def _execute_cmd(self, cmd: Command, data: Dict) -> Tuple[Dict, bool]:
335352
"""
336353
Execute a command from the ModelServerManager
@@ -382,12 +399,20 @@ def run_loop(self):
382399
"""
383400

384401
while(1):
385-
identity = self.socket.recv()
386-
_delim = self.socket.recv()
387-
payload = self.socket.recv()
388-
logging.debug(f"Python recv: {str(identity)}, {str(payload)}")
402+
try:
403+
payload = self._recv()
404+
except UnicodeError as e:
405+
logging.warning(f"Failed to decode : {e.reason}")
406+
continue
407+
except KeyboardInterrupt:
408+
if self._closing:
409+
logging.warning("Forced shutting down now.")
410+
os._exit(-1)
411+
else:
412+
logging.info("Received KeyboardInterrupt. Ctrl+C again to force shutting down.")
413+
self._closing = True
414+
continue
389415

390-
payload = payload.decode("ascii")
391416
send_id, recv_id, msg = self._parse_msg(payload)
392417
if msg is None:
393418
continue

src/self_driving/model_server/model_server_manager.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ ModelServerManager::ModelServerManager(const std::string &model_bin,
6969
case Callback::NOOP:
7070
break;
7171
case Callback::CONNECTED:
72+
MODEL_SERVER_LOG_INFO("[PID={}] ModelServer connected", ::getpid());
7273
connected_ = true;
7374
break;
7475
default:

0 commit comments

Comments
 (0)