0b1111~を用いてforループの進捗状況表示のタイミングを判定する試行
forループの中で、進捗状況の表示(print)を出すタイミングをbit演算「i & 0b1111... == 0」で判定します。(よく「i % 1000 == 0」等で判定する所)
表示頻度の調節は「1」を足すだけでOK。2bit値なので2倍ずつ頻度が変化。(正確な頻度でなく)適当に調節するだけでよいなら「1」を足していくだけなのでお手軽。
bitの「&」演算1回でOK。「%」(剰余演算)よりは処理負荷低。
# -*- coding: utf-8 -*-
# forループの進捗状況%表示タイミング「i & 0b1111.. == 0」を用いる方法
# note: np.arange(10)のコピーを大量にlistに追加すると、メモリが潤沢に使用されていく模様
import numpy as np
# sec: main
def main(if_print=True):
if if_print:
print("started:", end="")
t = np.arange(10) # 処理負荷用
n = 100000000 # 反復回数
y = [] # 結果用
for i in range(n):
# sec: 処理
y.append(t + i) # 処理負荷用
# sec: 進捗表示
if if_print:
if i & 0b1_1111_1111_1111_1111_1111 == 0:
print(f"{i / n * 100:.1f}%", end="")
elif i & 0b1_1111_1111_1111_1111 == 0:
print(".", end="", flush=True)
if if_print:
print(" ok")
print("finished.")
del y
# sec: entry
if __name__ == "__main__": main()
コンソール出力例:
started:0.0%...............2.1%...............4.2%..............
.6.3%...............8.4%...............10.5%...............12.6%
...............14.7%...............16.8%...............18.9%....
...........21.0%...............23.1%...............25.2%........
.......27.3%...............29.4%...............31.5%............
...33.6%...............35.7%...............37.7%...............3
9.8%...............41.9%...............44.0%...............46.1%
...............48.2%...............50.3%...............52.4%....
...........54.5%...............56.6%...............58.7%........
.......60.8%...............62.9%...............65.0%............
...67.1%...............69.2%...............71.3%...............7
3.4%...............75.5%...............77.6%...............79.7%
...............81.8%...............83.9%...............86.0%....
...........88.1%...............90.2%...............92.3%........
.......94.4%...............96.5%...............98.6%.......... ok
finished.
余談: メモリが潤沢に使用される
前述のtrial.pyを実行すると、必要以上にメモリが使用されていき、すぐにOSのメモリ使用率90%越えとなる。np.arange(10)のコピーを大量にlistに追加すると、メモリが潤沢に使用されていく模様。(PCが不安定になるようなことはない)
当処理が終了した後は、OSのメモリ使用率36%→27%となり、現在実行中のOS・アプリに必要な最低限のメモリ量が27%程度と分かる(のかもしれない)。
Author And Source
この問題について(0b1111~を用いてforループの進捗状況表示のタイミングを判定する試行), 我々は、より多くの情報をここで見つけました https://qiita.com/dl_from_scratch/items/c3c091323eb526e6d4d5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .