Dlaczego PyYAML spędza tyle czasu na analizowaniu pliku YAML?
Analizuję plik YAML zawierający około 6500 linii w tym formacie:
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:
Chcę po prostu przeanalizować to za pomocąBiblioteka PyYAML (Myślę, że w Pythonie nie ma więcej alternatyw:Jak mogę parsować plik YAML w Pythonie).
Tylko do testowania piszę ten kod, aby przeanalizować mój plik:
import yaml
config_file = "/path/to/file.yaml"
stream = open(config_file, "r")
sensors = yaml.load(stream)
Wykonywanie skryptu za pomocątime
Polecenie wraz ze skryptem, który otrzymałem tym razem:
real 0m3.906s
user 0m3.672s
sys 0m0.100s
Te wartości naprawdę nie wydają się zbyt dobre. Chcę tylko przetestować to samo z JSON, konwertując najpierw ten sam plik YAML na JSON:
import json
config_file = "/path/to/file.json"
stream = open(config_file, "r")
sensors = json.load(stream) # We read the yaml config file
Ale czas wykonania jest o wiele lepszy:
real 0m0.058s
user 0m0.032s
sys 0m0.008s
Dlaczego główny powód, dla którego PyYAML spędza więcej czasu na analizowaniu pliku YAML niż na analizowaniu JSON? Czy jest to problem PyYAML, czy może z powodu formatu YAML jest trudny do analizy?(prawdopodobnie jest pierwszym)
EDYTOWAĆ:
Dodam kolejny przykład z ruby i YAML:
require 'yaml'
sensors = YAML.load_file('/path/to/file.yaml')
A czas wykonania jest dobry! (lub przynajmniej nie tak źle jak przykład PyYAML):
real 0m0.278s
user 0m0.240s
sys 0m0.032s