def run(): ctx = zmq.asyncio.Context() loop = zmq.asyncio.ZMQEventLoop() asyncio.set_event_loop(loop) socket = ctx.socket(zmq.PULL) pool = init_db_pool(loop=loop) logger.debug('Connected to database') socket.bind(ZMQ_ADDRESS) logger.info(f'Listening to {ZMQ_ADDRESS} ...') aggregator = Aggregator(zmq_socket=socket, db_pool=pool) try: loop.run_until_complete(aggregator.run()) except KeyboardInterrupt: logger.info('Shutting down ...') finally: socket.disconnect() loop.run_until_complete(pool.close()) logger.info('Disconnected from ZMQ socket')