0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

○○作ってみない?Advent Calendar 2023

Day 22

PythonでTkinterじゃない「GUIアプリでも作ってみない?」2日目

Posted at

2つの関数を同時実行する方法

非同期関数ならasyncio.ensure_futureできるが、非同期関数ではないし...threadingでどうにかできないかな...などと思っていたのですが、どちらもメインスレッドでの実行を要求しており、なんか埒が明かない気がしてきたので別の方法を探してみました。

multiprocessing

名前は似ていますが、threadingとは違い、プロセスを作成して並列処理を行うことができます。
これを使用することで、2つの関数を実行できる気がしてみました。

main.py
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アプリケーションを作ってみない?」

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?