Python3 librsvg вызов через GObject медленнее, чем подпроцесс Popen - PullRequest
0 голосов
/ 26 апреля 2020

Я растерирую svg в png, используя python -3.8.

Путем некоторых поисков, проб и ошибок я обнаружил, что использование librsvg может быть моим лучшим вариантом сделать это быстрым способом.

Что меня немного смущает, так это то, что вызов библиотеки через GObjects кажется медленнее, чем вызов через подпроцесс.

def gobject(data):
    svg = RSVG_HANDLE.new_from_data(data)
    pix_buf = svg.get_pixbuf()
    result, buff = pix_buf.save_to_bufferv("png", [], [])

медленнее, чем

def console(data):
    with Popen(
        ["rsvg-convert"], stdin=PIPE, stdout=PIPE, stderr=STDOUT, shell=False
    ) as svg_convert:
        image, err = svg_convert.communicate(data)

После 100 прогонов это были результаты:

gobject took 0:00:00.341206 on average
console took 0:00:00.310452 on average

Используемые версии:

ubuntu    18.04.4
python    3.8.2
PyGObject 3.36.0
librsvg   2.40.20

Может кто-нибудь объяснить, почему запуск подпроцесса происходит быстрее или я что-то делаю неправильно при вызове GObject.

...