ようへいの日々精進XP

よかろうもん

2016 年 12 月 24 日(土)〜 2016 年 12 月 25 日(日)

湯布院温泉 はなの舞

2016 年のクリスマスは「湯布院温泉 はなの舞」にて。

www.hananomai.net

いいお湯でした。

奥さんも元気にってくれて嬉しい。

ジョギング

湯布院にて 40 分程度、約 8 キロ。

知らない街を走るのはテンション上がって頑張りすぎた。

素敵な

クリスマスイブ、クリスマスでした。

ショロカレ 24 日目 | 初老と Python (4) 〜 JSON モジュール速度比較オリンピック 2016 冬 〜

これは

初老丸アドベントカレンダー 24 日目の記事です。

qiita.com

ということで、自分の記事はずーっと小ネタですいません。

初老と Python (4) 〜 JSON モジュールオリンピック 2016 冬 〜

JSON モジュールって...

今まで標準の json モジュールしか知りませんでしたが、とあるお仕事で Python スクリプトボトルネックを調査していたところ、標準の json モジュールが結果として遅いんだ...という結論に至りました。

さて、他の json モジュールを選ばなければいけません...ということで、幾つかの JSON モジュールの処理速度比較というのをやってみました。

尚、環境によって結果は変動することが想定されますので、あくまでも参考程度に読んで頂けると幸いです。

出場選手

第一のコース

  • 標準の json モジュール
  • いつもお世話になってます

第二のコース

第三のコース

競技上の諸注意

OS 環境

bash-3.2$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11.6
BuildVersion:   15G1108

Python バージョン

サンプルデータ

競技方法

  • JSON データをデコードする時間を 5 回計測
  • CSV データを JSON データにエンコードする時間を 5 回計測

スクリプト

結果

概要

  • 全体的に ujson が中盤から飛び出して、そのままぶっちぎりな感じ
  • 但し、Python 3.6.0 だと標準の json モジュールも健闘している

JSON デコード

Python 2.7.13(※ Y 軸の単位は sec)

f:id:inokara:20161224083044p:plain

Python 3.6.0(※ Y 軸の単位は sec)

f:id:inokara:20161224083055p:plain

JSON エンコード

Python 2.7.13(※ Y 軸の単位は sec)

f:id:inokara:20161224083114p:plain

Python 3.6.0(※ Y 軸の単位は sec)

f:id:inokara:20161224083130p:plain

以上

メモでした。

2016 年 12 月 23 日(金)

ジョギング

  • 香椎浜 2 周
  • 強風で吹き飛ばされそうだった
  • 左の腰、股関節周りが違和感が続き、年明けに病院やな

奥さん

  • 奥さん家族の事で心労が重なっている
  • 出来るだけネガティブな方向に引きずられてしまうのを守ってあげなければいけないと考えている

2016 年 12 月 22 日(木)

うお...

気付いたら、2016 年も残り 10 日を切っているよ。

PythonJSON モジュール

お仕事で PythonJSON モジュールでデコード速度の比較をしたら ujson というモジュールが爆速で驚いた。

blog にしたいと思う。

2016 年 12 月 21 日(水)

ジョギング

失敗から学ぶために行っている取り組み

speakerdeck.com

胸が痛くなった。

「気をつけます」「以後注意します」は使ってしまっているよな...。

2016 年 12 月 20 日(火)

今年も

残すところ 10 日しか無いやんけ。

困ったな。

ダメダメ Python スクリプト

自分で作ったダメダメ Python スクリプトを改修した。

改修にあたって cProfile という標準のプロファイラを使ったけど、関数の呼び出し回数等が一目でわかって参考になった。

ショロカレ 18 日目 | 初老と Datadog (1) 〜 シェルスクリプトから Dogstatsd を介して Datadog にメトリクスを送信する的なやつ 〜

これは

初老丸アドベントカレンダー 18 日目の記事です。

qiita.com

ということで、自分の記事はずーっと小ネタですいません。

初老と Datadog (1) 〜 シェルスクリプトから Dogstatsd を介して Datadog にメトリクスを送信する的なやつ 〜

参考

http://docs.datadoghq.com/ja/guides/dogstatsd/

nc を使ってメトリクス送信するぞ(とある処理の経過時間を送る例)

ゲージ(Gauges)で送る

_elapsed_time=$(sleep $(((RANDOM % 100) + 1)))
echo "oreno.metrics.elapsed_time.gauges:${_elapsed_time}|g" | nc -w 1 -u localhost 8125

カウンター(Counter)で送る

_elapsed_time=$(sleep $(((RANDOM % 100) + 1)))
echo "oreno.metrics.elapsed_time.counters:${_elapsed_time}|c" | nc -w 1 -u localhost 8125

ヒストグラム(Histogram)で送る

# サンプルレートは 0 ~ 1 の小数点で指定する
_elapsed_time=$(sleep $(((RANDOM % 100) + 1)))
_sample_rate=0.5
echo "oreno.metrics.elapsed_time.histograms:${_elapsed_time}|h|@${_sample_rate}" | nc -w 1 -u localhost 8125

その他

  • Sets (セット)
  • Timers (タイマー)

上記のようなメトリクスの種類がありますが、今回は触れません。

送信したぞ

Datadog Agent が動いているホスト上で以下のようなスクリプトを動かしますよ。

while :
do
  _elapsed_time=$(((RANDOM % 100) + 1))
  echo ${_elapsed_time}
  echo "oreno.metrics.elapsed_time.gauges:${_elapsed_time}|g" | nc -w 1 -u localhost 8125
  _elapsed_time=$(((RANDOM % 100) + 1))
  echo ${_elapsed_time}
  echo "oreno.metrics.elapsed_time.counters:${_elapsed_time}|c" | nc -w 1 -u localhost 8125
  _elapsed_time=$(((RANDOM % 100) + 1))
  _sample_rate=0.5
  echo ${_elapsed_time}
  echo "oreno.metrics.elapsed_time.histograms:${_elapsed_time}|h|@${_sample_rate}" | nc -w 1 -u localhost 8125

  sleep 1
done

以下のようにメトリクスが作成されていますよ。

f:id:inokara:20161218205714p:plain

ヒストグラムについては、平均値、最小値、最大値、中央値及び 95 % のメトリクスがプロットされています。

以上

メモでした。