私はYAMLやJSONの速度を比較するために、小さなテストケースを作った:YAMLをスピードアップできますか?
import json
import yaml
from datetime import datetime
from random import randint
NB_ROW=1024
print 'Does yaml is using libyaml ? ',yaml.__with_libyaml__ and 'yes' or 'no'
dummy_data = [ { 'dummy_key_A_%s' % i: i, 'dummy_key_B_%s' % i: i } for i in xrange(NB_ROW) ]
with open('perf_json_yaml.yaml','w') as fh:
t1 = datetime.now()
yaml.safe_dump(dummy_data, fh, encoding='utf-8', default_flow_style=False)
t2 = datetime.now()
dty = (t2 - t1).total_seconds()
print 'Dumping %s row into a yaml file : %s' % (NB_ROW,dty)
with open('perf_json_yaml.json','w') as fh:
t1 = datetime.now()
json.dump(dummy_data,fh)
t2 = datetime.now()
dtj = (t2 - t1).total_seconds()
print 'Dumping %s row into a json file : %s' % (NB_ROW,dtj)
print "json is %dx faster for dumping" % (dty/dtj)
with open('perf_json_yaml.yaml') as fh:
t1 = datetime.now()
data = yaml.safe_load(fh)
t2 = datetime.now()
dty = (t2 - t1).total_seconds()
print 'Loading %s row from a yaml file : %s' % (NB_ROW,dty)
with open('perf_json_yaml.json') as fh:
t1 = datetime.now()
data = json.load(fh)
t2 = datetime.now()
dtj = (t2 - t1).total_seconds()
print 'Loading %s row into from json file : %s' % (NB_ROW,dtj)
print "json is %dx faster for loading" % (dty/dtj)
、結果は次のとおりです。
Does yaml is using libyaml ? yes
Dumping 1024 row into a yaml file : 0.251139
Dumping 1024 row into a json file : 0.007725
json is 32x faster for dumping
Loading 1024 row from a yaml file : 0.401224
Loading 1024 row into from json file : 0.001793
json is 223x faster for loading
私はUbuntuの12.04でlibyaml CライブラリとPyYAMLと3.11を使用しています。 jsonはyamlよりもシンプルですが、jsonとyamlの間の223倍の比率で私の設定が正しいかどうかは疑問です。
同じスピードレシオはありますか?
yaml.load()
をスピードアップするにはどうすればよいですか?
yaml.myを使用した読み込みはまだ12倍遅く、サンプルは600,000の空の辞書のリストです。 Yamlは余分な時間をほとんど必要としない、わずかにより洗練された構文解析を除いて、何も追加する必要はありません。 – codeshot
Macの場合:brew install yaml-cpp libyaml –
ジバンあなたは血の伝説です。私は物事をスピードアップするためにC++でいくつかのPythonコードを書き直そうとしていました。私の6MBのyamlファイルは、標準のyamlローダーを使用して53秒、CLoaderを使用して3秒しかかかりませんでした。 – nevelis