mirror of
https://github.com/ultrajson/ultrajson.git
synced 2024-11-24 05:12:02 +01:00
Changed default recursion limit. Added new benchmark
This commit is contained in:
parent
6b0bc7c623
commit
5950848bf9
64
python/benchmark2.py
Normal file
64
python/benchmark2.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# coding=UTF-8
|
||||||
|
import simplejson
|
||||||
|
import ujson
|
||||||
|
import sys
|
||||||
|
try:
|
||||||
|
import json
|
||||||
|
except ImportError:
|
||||||
|
json = simplejson
|
||||||
|
import cjson
|
||||||
|
from time import time as gettime
|
||||||
|
import time
|
||||||
|
import sys
|
||||||
|
import random
|
||||||
|
|
||||||
|
def timeit_compat_fix(timeit):
|
||||||
|
if sys.version_info[:2] >= (2,6):
|
||||||
|
return
|
||||||
|
default_number = 1000000
|
||||||
|
default_repeat = 3
|
||||||
|
if sys.platform == "win32":
|
||||||
|
# On Windows, the best timer is time.clock()
|
||||||
|
default_timer = time.clock
|
||||||
|
else:
|
||||||
|
# On most other platforms the best timer is time.time()
|
||||||
|
default_timer = time.time
|
||||||
|
def repeat(stmt="pass", setup="pass", timer=default_timer,
|
||||||
|
repeat=default_repeat, number=default_number):
|
||||||
|
"""Convenience function to create Timer object and call repeat method."""
|
||||||
|
return timeit.Timer(stmt, setup, timer).repeat(repeat, number)
|
||||||
|
timeit.repeat = repeat
|
||||||
|
|
||||||
|
def ujsonDec():
|
||||||
|
x = ujson.loads(decodeData)
|
||||||
|
|
||||||
|
def simplejsonDec():
|
||||||
|
x = simplejson.loads(decodeData)
|
||||||
|
|
||||||
|
def ujsonEnc():
|
||||||
|
x = ujson.dumps(encodeData)
|
||||||
|
|
||||||
|
def simplejsonEnc():
|
||||||
|
x = simplejson.dumps(encodeData)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import timeit
|
||||||
|
timeit_compat_fix(timeit)
|
||||||
|
|
||||||
|
COUNT = 100
|
||||||
|
|
||||||
|
# Load file into memory
|
||||||
|
f = open("sample.json", "rb")
|
||||||
|
decodeData = f.read()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
encodeData = simplejson.loads(decodeData)
|
||||||
|
|
||||||
|
# Decode 1 million times
|
||||||
|
print "ujson decode : %.05f calls/sec" % (COUNT / min(timeit.repeat("ujsonDec()", "from __main__ import ujsonDec", gettime,10, COUNT)), )
|
||||||
|
print "simplejson decode : %.05f calls/sec" % (COUNT / min(timeit.repeat("simplejsonDec()", "from __main__ import simplejsonDec", gettime,10, COUNT)), )
|
||||||
|
|
||||||
|
print "ujson encode : %.05f calls/sec" % (COUNT / min(timeit.repeat("ujsonEnc()", "from __main__ import ujsonEnc", gettime,10, COUNT)), )
|
||||||
|
print "simplejson encode : %.05f calls/sec" % (COUNT / min(timeit.repeat("simplejsonEnc()", "from __main__ import simplejsonEnc", gettime,10, COUNT)), )
|
||||||
|
|
@ -690,14 +690,7 @@ PyObject* objToJSON(PyObject* self, PyObject *args, PyObject *kwargs)
|
|||||||
PyObject *oensureAscii = NULL;
|
PyObject *oensureAscii = NULL;
|
||||||
int idoublePrecision = 5; // default double precision setting
|
int idoublePrecision = 5; // default double precision setting
|
||||||
|
|
||||||
PRINTMARK();
|
JSONObjectEncoder encoder =
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|Oi", kwlist, &oinput, &oensureAscii, &idoublePrecision))
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
JSONObjectEncoder encoder =
|
|
||||||
{
|
{
|
||||||
Object_beginTypeContext, //void (*beginTypeContext)(JSOBJ obj, JSONTypeContext *tc);
|
Object_beginTypeContext, //void (*beginTypeContext)(JSOBJ obj, JSONTypeContext *tc);
|
||||||
Object_endTypeContext, //void (*endTypeContext)(JSOBJ obj, JSONTypeContext *tc);
|
Object_endTypeContext, //void (*endTypeContext)(JSOBJ obj, JSONTypeContext *tc);
|
||||||
@ -718,12 +711,23 @@ PyObject* objToJSON(PyObject* self, PyObject *args, PyObject *kwargs)
|
|||||||
idoublePrecision,
|
idoublePrecision,
|
||||||
1, //forceAscii
|
1, //forceAscii
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
PRINTMARK();
|
||||||
|
|
||||||
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|Oi", kwlist, &oinput, &oensureAscii, &idoublePrecision))
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (oensureAscii != NULL && !PyObject_IsTrue(oensureAscii))
|
if (oensureAscii != NULL && !PyObject_IsTrue(oensureAscii))
|
||||||
{
|
{
|
||||||
encoder.forceASCII = 0;
|
encoder.forceASCII = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
encoder.doublePrecision = idoublePrecision;
|
||||||
|
|
||||||
PRINTMARK();
|
PRINTMARK();
|
||||||
ret = JSON_EncodeObject (oinput, &encoder, buffer, sizeof (buffer));
|
ret = JSON_EncodeObject (oinput, &encoder, buffer, sizeof (buffer));
|
||||||
PRINTMARK();
|
PRINTMARK();
|
||||||
|
3315
python/sample.json
Normal file
3315
python/sample.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
|||||||
#define UJSON_VERSION "1.16"
|
#define UJSON_VERSION "1.17"
|
||||||
|
@ -66,7 +66,7 @@ tree doesn't have cyclic references.
|
|||||||
|
|
||||||
// Max recursion depth, default for encoder
|
// Max recursion depth, default for encoder
|
||||||
#ifndef JSON_MAX_RECURSION_DEPTH
|
#ifndef JSON_MAX_RECURSION_DEPTH
|
||||||
#define JSON_MAX_RECURSION_DEPTH 256
|
#define JSON_MAX_RECURSION_DEPTH 1024
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user