def main(): context = zmq.Context() socket: zmq.Socket = context.socket(zmq.PUB) done: zmq.Socket = context.socket(zmq.SUB) done.subscribe('') done.setsockopt(zmq.RCVTIMEO, 2000) socket.connect(DATA_ENDPOINT) done.connect(COMMAND_ENDPOINT) predictors = [] models, false_model = get_models(sys.argv[1]) for model in models: x = [recording for recording, _ in model] sample_len = int( np.ceil(np.average([recording_len for _, recording_len in model]))) predictor = DTW(dtw_cost, sample_len) predictor.compile(dtw_k) predictor.train(x, [[0.0, 1.0] for _ in range(len(model))]) predictors.append(predictor) def cb(found): socket.send_string('true' if found else 'false') print('found!', found) audio_handler = AudioHandler(cb, predictors) audio_handler.start() signal_received = False def signal_cb(_, __): nonlocal signal_received signal_received = True signal.signal(signal.SIGINT, signal_cb) print('started') socket.send_string('started') while not signal_received: try: string = done.recv_string() if string == 'done': signal_received = True break except zmq.ZMQError as err: print('Error while receiving: ', err) time.sleep(1) audio_handler.stop() socket.close() done.close()