Бенчмаркинг сериализаторов Python JSON — json vs ujson vs orjson


Введение

Если вы работаете с большими наборами данных в формате json в вашем коде на python, то вы можете попробовать использовать сторонние библиотеки, такие как ujson и orjson, которые являются заменой библиотеки json в python.

Согласно их документации

  • ujson (UltraJSON) — это сверхбыстрый кодер и декодер JSON, написанный на чистом C с привязкой к Python 3.7+.

  • orjson — это быстрая, корректная библиотека JSON для Python. Это самая быстрая библиотека Python для кодирования и декодирования JSON. Она нативно сериализует экземпляры dataclass, datetime, numpy и UUID.

Бенчмаркинг

Я провел базовый бенчмарк, сравнивая json, ujson и orjson. Результаты бенчмарка оказались интересными.

import time
import json
import orjson
import ujson

def benchmark(name, dumps, loads):
    start = time.time()
    for i in range(3000000):
        result = dumps(m)
        loads(result)
    print(name, time.time() - start)

if __name__ == " __main__":
    m = {
        "timestamp": 1556283673.1523004,
        "task_uuid": "0ed1a1c3-050c-4fb9-9426-a7e72d0acfc7",
        "task_level": [1, 2, 1],
        "action_status": "started",
        "action_type": "main",
        "key": "value",
        "another_key": 123,
        "and_another": ["a", "b"],
    }

    benchmark("Python", json.dumps, json.loads)
    benchmark("ujson", ujson.dumps, ujson.loads)

    # orjson only outputs bytes, but often we need unicode:
    benchmark("orjson", lambda s: str(orjson.dumps(s), "utf-8"), orjson.loads)

# OUTPUT:
# Python 12.502133846282959
# ujson 4.428200960159302
# orjson 2.3136467933654785

Вход в полноэкранный режим Выход из полноэкранного режима

ujson в 3 раза быстрее, чем стандартная библиотека json

orjson более чем в 6 раз быстрее стандартной библиотеки json.

Заключение

Для большинства случаев вы захотите использовать стандартную библиотеку json в python, которая устраняет зависимость от других библиотек. С другой стороны, вы можете попробовать ujsonwhich, которая является простой заменой библиотеки json в python. Если вам нужна большая скорость, а также экземпляры dataclass, datetime, numpy и UUID, и вы готовы работать с более сложным кодом, то вы можете попробовать свои силы в orjson

Оцените статью
Procodings.ru
Добавить комментарий