¿Por qué PyYAML invierte tanto tiempo en analizar un archivo YAML?
Estoy analizando un archivo YAML con alrededor de 6500 líneas con 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:
Solo quiero analizarlo con elBiblioteca PyYAML (Creo que no hay más alternativas para eso en Python:¿Cómo puedo analizar un archivo YAML en Python?).
Solo para probar, escribo ese código para analizar mi archivo:
import yaml
config_file = "/path/to/file.yaml"
stream = open(config_file, "r")
sensors = yaml.load(stream)
Ejecutando el script contime
comando junto con el script que obtengo esta vez:
real 0m3.906s
user 0m3.672s
sys 0m0.100s
Que los valores no parecen demasiado buenos en realidad. Solo quiero probar lo mismo con JSON, primero convirtiendo el mismo archivo YAML a JSON primero:
import json
config_file = "/path/to/file.json"
stream = open(config_file, "r")
sensors = json.load(stream) # We read the yaml config file
Pero el tiempo de ejecución es mucho mejor:
real 0m0.058s
user 0m0.032s
sys 0m0.008s
¿Por qué es la razón principal por la que PyYAML pasa más tiempo analizando el archivo YAML que analizando el JSON? ¿Es un problema de PyYAML o es difícil de analizar debido al formato YAML?(probablemente sea el primero)
EDITAR:
Añado otro ejemplo con ruby y YAML:
require 'yaml'
sensors = YAML.load_file('/path/to/file.yaml')
¡Y el tiempo de ejecución es bueno! (o al menos no tan malo como el ejemplo de PyYAML):
real 0m0.278s
user 0m0.240s
sys 0m0.032s