研究室のオンラインミーティング自動開催ツールを弄る回です。
完成当時の実装ですと、RPAツールが例外を飛ばして落ちた瞬間にGUIも落ちるので、これらをスレッドとして分割してRPAツールがGUIに影響を与えないようにします。
目次
1.修正後のコード
2.Pythonの並列処理
threadingというモジュールが用意されています。これを用いると容易に実装できます。
他にもスレッドプールやプロセスルールなどもあります。
今回は、GUIを走らせるスレッドとRPAツールを走らせるスレッドを分けるだけのため、スレッドプールのように同時に動かす最大数を制限する必要はなく、プロセスとして分割してマルチコアで動かす必要もないため、threadingで並列処理を行いました。
3.並列処理の前に
もともとRPAツール部分はGUI内のwhile文内に書かれていました。しかし、threadingで並列処理する場合は、実行する関数とともにTreadクラスをインスタンス化する必要があります。要するに、今回の変更ではRPAツールを関数化する必要がありました。
4.この変数ってグローバル変数の必要ある?
RPAツールの関数化とともに、グローバル環境で宣言している変数についても見直しを行いました。グローバル環境にすべて変数を宣言するのはお行儀が良くないので、できる限りその変数を使う関数内に移動させました。
5.Pythonのグローバル変数を関数内で使う時
グローバル変数とローカル変数に同じ名前をつけることができます。また、関数内で宣言されるとローカル変数と扱われます。関数内でグローバル関数を使う場合は、変数名の前にglobalをつけます。
6.startするのを忘れない
インスタンス化した後、startするのを忘れると意味がないので忘れないようにしましょう。
7.おわりに
調べてすぐにマルチスレッド化できてびっくりしました。でもマルチスレッド化ならC++も比較的簡単だった覚えがあります。
実装予定の機能ができたので、次はログをファイルに出力するようにしたいです。ロギング機能ってのがあるらしい。
8.参考文献
Python♪関数で変なエラーが出た:local variable ‘x’ referenced before assignment