async def METHOD_NAME(self) -> None:
    pub = self.ctx.socket(zmq.PUB)
    pub.connect(self.url)
    # give time to subscribers to initialize; wait time >.2 sec
    await asyncio.sleep(0.3)
    # send setup connection message
    # await pub.send_multipart([b'world', "init".encode('utf-8')])
    # await pub.send_json([b'world', "init".encode('utf-8')])
    # without try statement, no error output
    try:
        # keep sending messages
        while True:
            # ask for message
            msg = self.hello_world.msg_pub()
            print(f"world pub: {msg}")
            # slow down message publication
            await asyncio.sleep(0.5)
            # publish message to topic 'world'
            # multipart: topic, message; async always needs `send_multipart()`?
            await pub.send_multipart([b'world', msg.encode('utf-8')])
    except Exception as e:
        print("Error with pub world")
        # print(e)
        logging.error(traceback.format_exc())
        print()
    finally:
        # TODO disconnect pub/sub
        pass