[manual] Use ujson instead of simplejson.

This saves something like 15ms on our 1000 message get_old_messages
queries, and will save even more when we start sending JSON dumps into
our memcached system.

We need to install python-ujson on servers and dev instances before
pushing this to prod.

(imported from commit 373690b7c056d00d2299a7588a33f025104bfbca)
This commit is contained in:
Tim Abbott
2013-06-18 17:55:55 -04:00
parent 678dd502ef
commit 222ef672b5
25 changed files with 120 additions and 119 deletions

View File

@@ -3,7 +3,7 @@ from __future__ import absolute_import
from django.conf import settings
import pika
import logging
import simplejson
import ujson
import random
import time
import threading
@@ -84,12 +84,12 @@ class SimpleQueueClient(object):
def json_publish(self, queue_name, body):
try:
return self.publish(queue_name, simplejson.dumps(body))
return self.publish(queue_name, ujson.dumps(body))
except (AttributeError, pika.exceptions.AMQPConnectionError):
self.log.warning("Failed to send to rabbitmq, trying to reconnect and send again")
self._reconnect()
return self.publish(queue_name, simplejson.dumps(body))
return self.publish(queue_name, ujson.dumps(body))
def register_consumer(self, queue_name, consumer):
def wrapped_consumer(ch, method, properties, body):
@@ -103,7 +103,7 @@ class SimpleQueueClient(object):
def register_json_consumer(self, queue_name, callback):
def wrapped_callback(ch, method, properties, body):
return callback(ch, method, properties, simplejson.loads(body))
return callback(ch, method, properties, ujson.loads(body))
return self.register_consumer(queue_name, wrapped_callback)
def drain_queue(self, queue_name, json=False):
@@ -118,7 +118,7 @@ class SimpleQueueClient(object):
self.channel.basic_ack(meta.delivery_tag)
if json:
message = simplejson.loads(message)
message = ujson.loads(message)
messages.append(message)
self.ensure_queue(queue_name, opened)