if __name__ == "__main__"
Pythonのドキュメントによると
モジュールは、自身の __name__ をチェックすることでメインスコープで実行されているかどうかを確認できます。これはモジュールがスクリプトとして、あるいはインポートでなく python -m で起動されたときに実行するコードの条件として使用できる一般的なイディオムです:
とあります。
ライブラリを作成している時にテストコードを書く場合に良く使用されますが、今回のLEGOでのライブラリ化では使用できませんでした。
色々試した結果以下の方法で実現できました。
LEGOでif __name__ == "__main__"
プロジェクトとして実行された場合にHUBのメモリやディスクの使用状況を表示しています。
if __file__.split('/')[3] == '__init__.mpy':
import os
import gc
import micropython
print('-----------------------------')
stat = os.statvfs('/')
total_size = stat[0] * stat[2]
free_size = stat[0] * stat[4]
print('each block is {} bytes big'.format(stat[0]))
print("in bytes, that's {} bytes free out of a total of {}".format(free_size, total_size))
print('-----------------------------')
gc.collect()
micropython.mem_info()
print('-----------------------------')
print('Initial free: {} allocated: {}'.format(gc.mem_free(), gc.mem_alloc()))
print('-----------------------------')
実行すると
-----------------------------
each block is 4096 bytes big
in bytes, that's 29052928 bytes free out of a total of 32505856
-----------------------------
mem: total=595907, current=402437, peak=404485
stack: 1052 out of 7168
GC: total: 242368, used: 193024, free: 49344
No. of 1-blocks: 3072, 2-blocks: 892, max blk sz: 321, max free sz: 869
-----------------------------
Initial free: 49344 allocated: 193024
-----------------------------
ストレージとしては32Mバイトの殆どが空いていることがわかります。
また、MicroPythonの場合、実行中のプログラムがオブジェクトをインスタンス化すると、必要なメモリがヒープから割り当てられますが、その空き容量が49Kバイト程あることもわかります。
0 件のコメント:
コメントを投稿