Python реализация авро медленная? - PullRequest
6 голосов
/ 06 мая 2011

Я читаю некоторые данные из файла avro, используя библиотеку avro. Загрузка 33K объектов из файла занимает около минуты. Это кажется мне очень медленным, особенно когда версия Java читает тот же файл примерно за 1 секунду.

Вот код, я что-то не так делаю?

import avro.datafile
import avro.io
from time import time

def load(filename):
    fo = open(filename, "rb")
    reader = avro.datafile.DataFileReader(fo, avro.io.DatumReader())
    for i, record in enumerate(reader):
        pass

    return i + 1

def main(argv=None):
    import sys
    from argparse import ArgumentParser

    argv = argv or sys.argv

    parser = ArgumentParser(description="Read avro file")


    start = time()
    num_records = load("events.avro")
    end = time()

    print("{0} records in {1} seconds".format(num_records, end - start))

if __name__ == "__main__":
    main()

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

Пакет avro Python , доступный в PyPI, является чистым Python, поэтому я не удивлен, если он медленнее Java на порядок или более.

Существует реализация Avro C, но, насколько мне известно, никто еще не создал расширение Python на ее основе.

1 голос
/ 17 ноября 2012

Похоже, что есть пакет Python fastavro, который является быстрой реализацией Cython, но менее полнофункциональный.

https://bitbucket.org/tebeka/fastavro

...