くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

【Python】memory_profilerの結果をloggerで出力する

Pythonでメモリ使用量とか調べるときに便利なmemory_profiler。
loggerを使っているので、結果をそっちで表示したいなと思ったのでその備忘録。

memory-profilerとは

各行のメモリ使用量とかを計測してくれるライブラリ

インストール
$ pip install memory-profiler
サンプル

使い方はとしては、計測したい関数に@profileをつけるだけ!

from memory_profiler import profile


@profile
def do_function():
    print "Execute do something.."


def main():
    do_function()


if __name__ == '__main__':
    main()
結果

こんな感じで表示してくれる。

$ python sample.py
Execute do something..
Filename: sample.py

Line #    Mem usage    Increment   Line Contents
================================================
     4      9.1 MiB      9.1 MiB   @profile
     5                             def do_function():
     6      9.1 MiB      0.0 MiB       print "Execute do something.."

memory_profilerの結果をloggerに渡す

proflieデコレータ、関数的にも使えて、streamを渡せるっぽい。

ただ、loggerからstreamをとってくるのは大変なので、
io.StringIOに一時的に書き出して、loggerで出力してみた。

サンプル
import logging
import io
from memory_profiler import profile

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)


def do_function():
    logger.info("Execute do something..")


def main():
    with io.StringIO() as f:
        profile(func=do_function, stream=f)()
        logger.info(f.getvalue())


if __name__ == '__main__':
    main()
結果

こんな感じにloggerでも表示が!

python sample.py
INFO:__main__:Execute do something..
INFO:__main__:Filename: sample.py

Line #    Mem usage    Increment   Line Contents
================================================
     9      9.2 MiB      9.2 MiB   def do_function():
    10      9.2 MiB      0.0 MiB       logger.info("Execute do something..")

以上!!

参考になる書籍

スラスラ読める Pythonふりがなプログラミング

Pythonプロフェッショナルプログラミング第3版

基礎から学ぶ Django

基礎から学ぶ Django

  • 作者: 関根裕紀,新井正貴
  • 出版社/メーカー: シーアンドアール研究所
  • 発売日: 2019/09/01
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Python Django 超入門

Python Django 超入門

参考にしたサイト様