Warum verbringt PyYAML so viel Zeit damit, eine YAML-Datei zu analysieren?
Ich analysiere eine YAML-Datei mit ca. 6500 Zeilen in folgendem Format:
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:
Ich möchte es nur mit dem analysierenPyYAML-Bibliothek (Ich denke, es gibt in Python keine Alternativen mehr dazu:Wie kann ich eine YAML-Datei in Python analysieren?).
Nur zum Testen schreibe ich diesen Code, um meine Datei zu analysieren:
import yaml
config_file = "/path/to/file.yaml"
stream = open(config_file, "r")
sensors = yaml.load(stream)
Ausführen des Skripts mittime
Befehl zusammen mit dem Skript bekomme ich dieses Mal:
real 0m3.906s
user 0m3.672s
sys 0m0.100s
Diese Werte scheinen nicht wirklich gut zu sein. Ich möchte dasselbe nur mit JSON testen und die gleiche YAML-Datei zuerst in JSON konvertieren:
import json
config_file = "/path/to/file.json"
stream = open(config_file, "r")
sensors = json.load(stream) # We read the yaml config file
Die Ausführungszeit ist aber weitaus besser:
real 0m0.058s
user 0m0.032s
sys 0m0.008s
Warum verbringt PyYAML hauptsächlich mehr Zeit mit dem Parsen der YAML-Datei als mit dem Parsen der JSON-Datei? Handelt es sich um ein PyYAML-Problem oder ist es aufgrund des YAML-Formats schwer zu analysieren?(wahrscheinlich ist der erste)
BEARBEITEN:
Ich füge ein weiteres Beispiel mit Ruby und YAML hinzu:
require 'yaml'
sensors = YAML.load_file('/path/to/file.yaml')
Und die Ausführungszeit ist gut! (oder zumindest nicht so schlecht wie das PyYAML-Beispiel):
real 0m0.278s
user 0m0.240s
sys 0m0.032s