class RpcClient(object): def __init__(self): self.response = None self.connection = Connection() self.channel = Channel(self.connection) (self.queue, _, _) = self.channel.queue_declare(exclusive=True) self.channel.queue_bind(self.queue, exchange='django_amqp_example') def request(self, body): message = Message( body=json.dumps(body), reply_to=self.queue, content_type='application/json') self.channel.basic_publish( message, exchange='django_amqp_example', routing_key='task_queue') print "Task submitted:", json.dumps(body) def callback(msg): self.response = json.loads(msg.body) self.channel.basic_consume( callback=callback, queue=self.queue, no_ack=True) while True: self.connection.drain_events(timeout=60) if self.response is not None: break self.connection.close() return self.response