<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def start(self):
 """Start the consumer. This starts a listen loop on a zmq.PULL socket, calling ``self.handle`` on each incoming request and pushing the response on a zmq.PUSH socket back to the producer."""

        if not self.initialized:
            raise Exception("Consumer not initialized (no Producer).")
        producer = self.producer
        context = zmq._Context()
        self.pull = context.socket(zmq.PULL)
        self.push = context.socket(zmq.PUSH)
        self.pull.connect('tcp://%s:%s' % (producer.host, producer.push_port))
        self.push.connect('tcp://%s:%s' % (producer.host, producer.pull_port))
        # TODO: notify the producer that this consumer's ready for work?
        self.listen()