【Python】CPU使用率10%未満になるとmp3が再生する

はじめまして、ガンちゃんです。
本記事は、”CPU使用率10%未満になると、アラームで知らせてくれる”という記事です。
お読みいただければ幸いです。

## 背景
このプログラム作成の背景として、
友人が汎用ソフトで解析をしている際に、「解析が終わったら、音声で知らして欲しいな～」と言い、「「よし作ろう！！！」」となりました（　←いや、ならない。。。）

## 概要
解析中のCPU使用率は10%より大きく値が定常しており、解析をしていない際のCPU使用率は大体10%未満で定常していると思いました。
10%より大きいCPU使用率から10%未満のCPU使用率に移行したならば、これまで生じていたCPUへの負荷がなくなった、すなわち解析が終了したと判定できると考えました。
そこで、本プログラムではCPU使用率10%未満になるとアラームのmp3が再生して教えてくれるようにしました。

注1：実際の解析で検証してないので、上手くいくかは分かりません
注2：解析が汎用ソフトではなくプログラムであれば、もっといい方法があると思います


## CPU使用率の取得
CPU使用率の取得は、下記によって行います。
```cpu_buzzer.py
import psutil

#CPU使用率を取得 
cpu = psutil.cpu_percent(interval=1)
#CPU使用率の出力
print('cpu:', cpu)
```
下記のリンクを参考にしました。
https://pg-chain.com/python-psutil

## アラームの再生とメッセージボックス表示
変数”alarm_itr”でmp3が任意の回数を指定し、その後再生の処理を行います。
アラーム音が再生された後、メッセージボックスが表示されます。
そして、”はい”ボタンを押すと、システムが終わり、終了です。
```cpu_buzzer.py
from pygame import mixer
import sys
from tkinter import messagebox

## 回数設定:  12[sec]×1.0e+4 (回数は,任意)
alarm_itr = 10000
## 初期設定
mixer.init()
## 音楽ファイルの読み込み
mixer.music.load( "Clock-Alarm05-4(Low-Loop).mp3" )
## 音楽の再生回数("alarm_itr"回)
mixer.music.play(alarm_itr)   

# メッセージボックス
while True:
    ret = messagebox.askyesno('CPU使用率が10%未満の報告', 'ウィンドウを閉じますか？')
    if ret == True:
        sys.exit()
``` 
メッセージボックスは、下図です。
![cpu_buzzer_mes.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1893155/aaabc5b1-8ed1-40b7-6050-8cf1858c4253.png)


アラーム音の音声は、下記のフリー音源を使用いたしました。
https://otologic.jp/free/se/clock01.html
Pythonを用いたMP3再生について、下記を参考にいたしました。
https://www.delftstack.com/ja/howto/python/python-play-mp3/
メッセージボックスを表示は、下記を参考にしました。
https://pg-chain.com/python-messagebox

## プログラム全体
プログラムの全体は、下記になります。
処理内容として、
毎５秒ずつCPU使用率を取得し、10％未満になるまで行っていきます。
10％未満になると、まずコマンド上で経過時間と終了時CPU使用率を出力します。
次に、アラームのmp3が再生され、メッセージボックスが表示されます。
メッセージボックスの”はい”を押すと、プログラム終了です。
（CPUに負荷のかかる処理をした後に実行）

```cpu_buzzer.py
import psutil
import time
from pygame import mixer
import sys
from tkinter import messagebox

start = time.time()

while True:
  #5秒間処理停止（5秒は,任意）
  time.sleep(5)
  # CPU使用率を取得 
  cpu = psutil.cpu_percent(interval=1)
  #CPU使用率の出力
  print('cpu:', cpu)
  #条件文：CPU使用率が10%未満の場合,終了
  if cpu < 10:
    break

#経過時間と終了時CPU使用率
print('Finesh:')
end_time = time.time() - start
print('Time ', end_time)
print('CPU[%] ', cpu)

#アラームの再生
## 回数設定:  12[sec]×1.0e+4 (回数は,任意)
alarm_itr = 10000
## 初期設定
mixer.init()
## 音楽ファイルの読み込み
mixer.music.load( "Clock-Alarm05-4(Low-Loop).mp3" )
## 音楽の再生回数("alarm_itr"回)
mixer.music.play(alarm_itr)   

# メッセージボックス
while True:
    ret = messagebox.askyesno('CPU使用率が10%未満の報告', 'ウィンドウを閉じますか？')
    if ret == True:
        sys.exit()

```

## 最後に

次は、上記プログラムを参考に、アラームではなくメールでの報告ができるプログラムに改良します。
下記、次の記事です。
https://qiita.com/mugiGAN/items/2d8b3e4490967a5c4eba


冒頭にも述べましたが、解析が汎用ソフトではなくプログラムであれば、もっといい方法があると思います。
いずれ検討するかもしれません。

#### （修正）
Pythonでプログラミングを書いている場合、CPU使用率を見ずとも処理終了時にmp3を再生すればいいです。
上記のCPU使用率を取得している処理を消し、その部分に自身が行いたい処理を追加すれば実現可能だと思います。

## 参考リンク(まとめ)
###### CPU使用率取得
【Python】メモリ・CPUの使用率を取得する（psutil）：
https://pg-chain.com/python-psutil
###### モジュールtimeについて
処理を一時停止！Pythonでsleepを使う方法【初心者向け】
https://techacademy.jp/magazine/15822
【Python入門】timeモジュールでプログラムの実行時間を計測する方法
https://www.sejuku.net/blog/23955
Pythonのwhile文によるループ処理（無限ループなど）
https://note.nkmk.me/python-while-usage/
###### アラーム音（フリー）
https://otologic.jp/free/se/clock01.html
###### Pythonを用いたMP3再生
Python を使用して MP3 ファイルを再生する
https://www.delftstack.com/ja/howto/python/python-play-mp3/
###### メッセージボックス表示
【Python】メッセージボックスを表示する(tkinter.messagebox)
https://pg-chain.com/python-messagebox