2つの関数を同時実行する方法
非同期関数ならasyncio.ensure_future
できるが、非同期関数ではないし...threadingでどうにかできないかな...などと思っていたのですが、どちらもメインスレッドでの実行を要求しており、なんか埒が明かない気がしてきたので別の方法を探してみました。
multiprocessing
名前は似ていますが、threadingとは違い、プロセスを作成して並列処理を行うことができます。
これを使用することで、2つの関数を実行できる気がしてみました。
import frontend
import backend
import multiprocessing
def main():
backend_process = multiprocessing.Process(target=backend.main)
frontend_process = multiprocessing.Process(target=frontend.main)
backend_process.start()
frontend_process.start()
frontend_process.join()
backend_process.kill()
if __name__ == "__main__":
main()
今回、バックエンド部とフロントエンド部でまずファイルを分け、その中のmain
関数で、バックエンドならSanic.run()
、フロントエンドならwebview.start()
を実行するようにしています。
そして、main.py
では、それぞれのプロセスを作成し、それぞれのプロセスを実行しています。
これを実行することで、いとも簡単に2つの関数を同時実行することができました。
やっぱり、プログラミングをするうえで、プロセスやスレッド、非同期処理などの知識は必要だなぁと思いました。
ちなみに今のコードだと、なんかよくわからないんですけどフロントエンドを終わらせてもバックエンドが終わらず生きたゾンビになるという問題があります。
よくわからないんですけどまぁ仕方ないなぁって思って割り切ってます。なんかいい方法見つけたら記事でも出してください。誰かが喜びます。
まとめ
今回は、PythonでGUIアプリケーションを作る方法を紹介しました。
もっと短めの内容にする予定でしたがちょっと分野が分かれた説明ができてしまったので分けました。
こんな記事読んでるぐらいならRust勉強した方がいいと思いますタブン...
というわけで、「PythonでTkinterじゃないGUIアプリケーションを作ってみない?」