Por que PyYAML está gastando tanto tempo apenas analisando um arquivo YAML?
Eu estou analisando um arquivo YAML com cerca de 6500 linhas com este formato:
foo1:
bar1:
blah: { name: "john", age: 123 }
metadata: { whatever1: "whatever", whatever2: "whatever" }
stuff:
thing1:
bluh1: { name: "Doe1", age: 123 }
bluh2: { name: "Doe2", age: 123 }
thing2:
...
thingN:
foo2:
...
fooN:
Eu só quero analisá-lo com oBiblioteca PyYAML (Eu acho que não há mais alternativas para isso em Python:Como posso analisar um arquivo YAML em Python).
Apenas para testar, escrevo esse código para analisar meu arquivo:
import yaml
config_file = "/path/to/file.yaml"
stream = open(config_file, "r")
sensors = yaml.load(stream)
Executando o script comtime
comando junto com o script eu recebo desta vez:
real 0m3.906s
user 0m3.672s
sys 0m0.100s
Esses valores não parecem muito bons de verdade. Eu só quero testar o mesmo com JSON, apenas convertendo o mesmo arquivo YAML para JSON primeiro:
import json
config_file = "/path/to/file.json"
stream = open(config_file, "r")
sensors = json.load(stream) # We read the yaml config file
Mas o tempo de execução é muito melhor:
real 0m0.058s
user 0m0.032s
sys 0m0.008s
Por que o principal motivo pelo qual o PyYAML gasta mais tempo analisando o arquivo YAML do que analisando o JSON? É um problema de PyYAML ou é por causa do formato YAML é difícil de analisar?(provavelmente é o primeiro)
EDITAR:
Eu adiciono outro exemplo com ruby e YAML:
require 'yaml'
sensors = YAML.load_file('/path/to/file.yaml')
E o tempo de execução é bom! (ou pelo menos não tão ruim quanto o exemplo PyYAML):
real 0m0.278s
user 0m0.240s
sys 0m0.032s