Передача очень больших объектов через XML -RP C в Python - PullRequest
0 голосов
/ 26 апреля 2020

Я возился с несколькими личными проектами и обнаружил необходимость перенести обработку большого объема данных на более мощные выделенные серверы. Я склонен делать это за XML -RP C в Python, и сделал несколько интересных наблюдений, и хотел бы поделиться и посмотреть, знает ли кто-нибудь лучший или более эффективный способ сделать это.

Итак, допустим, мне нужно отправить большой объем данных свыше XML -RP C в Python. Какой самый быстрый способ сделать это?

1 Ответ

0 голосов
/ 26 апреля 2020

Я начал экспериментировать с модулем XML -RP C, так как в Интернете ничего особенного нет. Первоначально для обработки моих данных (~ 15 мегабайт) я просто передавал объект словаря методу XML -RP C на стороне клиента. Это было очень медленно, как на стороне сервера, так и на стороне клиента - каждая из них занимала несколько минут всего для кодирования / декодирования данных! Я предполагаю (но не уверен), что это проблема с необходимостью кодирования большого количества данных в XML.

Однако после некоторой возни я попытался сериализовать словарь как JSON объект с json.dumps на стороне клиента и загрузить его с json.loads на стороне сервера, что, к моему удивлению, закончилось до много раз быстрее.

Предупреждение: Чистая спекуляция!

Я подозреваю, что кодировка XML может быть намного медленнее, чем кодировка JSON, поскольку записано json.dumps в CPython, но я не знаю, записано ли кодирование Python XML в CPython. Я столкнулся с подобной проблемой, используя json.dumps против json.dump в предыдущем проекте: последний во много раз медленнее, потому что он написан на чистом Python; в отличие от записи в CPython (по словам в отчете об ошибке Python, "json .dump не использует ускорения C": https://bugs.python.org/msg137170 ).

I может теоретически загрузить сериализованную строку JSON (или засеченный объект dict, но это кажется мне плохой идеей) в облачное хранилище, такое как AWS S3 , а затем потяните его на стороне сервера, но я чувствую, что я мог бы просто отправить данные прямо с одного компьютера на другой в этот момент.

Я собираюсь поэкспериментировать с сжатием gzip для сериализованной строки JSON, которая, как мы надеемся, станет узким местом для пропускной способности сети, поскольку в конечном итоге я планирую обрабатывать гигабайты данных через RP C. Я опубликую свои результаты здесь.

Я думал, что это было интересно, и мне интересно, сталкивался ли кто-нибудь с этой проблемой раньше, и как они это сделали. Я не смог найти много онлайн. Ура!

...