どちらかと実用というより、Pythonの基礎知識を聞きたい感じです。
以下の子プロセスを使うコードなんですが、良くあるように、
if name == "main":
main()
としてdef main():で定義したコードを動かしています。
Python
1 2from multiprocessing import Process 3from time import sleep 4import tkinter 5 6def testwind(): 7 root = tkinter.Tk() 8 label = tkinter.Label(root, text='test') 9 label.pack() 10 root.mainloop() 11 12def main(): 13 i1 = Process (target=testwind) 14 i1.start() 15 while True: 16 sleep(1) 17 print("test") 18 19if __name__ == "__main__": 20 main() 21
これを以下のようにdef main()とせずにそのまま書くと動きません。
何故なんでしょうか?
if name == "main":を使えというエラーはでるのですが
Python
1from multiprocessing import Process 2from time import sleep 3import tkinter 4 5def testwind(): 6 root = tkinter.Tk() 7 label = tkinter.Label(root, text='test') 8 label.pack() 9 root.mainloop() 10 11 12i1 = Process (target=testwind) 13i1.start() 14while True: 15 sleep(1) 16 print("test") 17
また、以下のようにif name == "main":を入れてみても動きません。
要するに関数として定義して呼び出さないと動かないみたいです。
何故これはダメなのか理由が知りたいです。詳しい方解説していただけるとありがたいです。
Python
1from multiprocessing import Process 2from time import sleep 3import tkinter 4 5def testwind(): 6 root = tkinter.Tk() 7 label = tkinter.Label(root, text='test') 8 label.pack() 9 root.mainloop() 10 11if __name__ == '__main__': 12 i1 = Process (target=testwind) 13 i1.start() 14 while True: 15 sleep(1) 16 print("test") 17
……それから追加で少し別の疑問も。良く本とかネットではimportで呼び出す時に実行されない様に name == "main"の時、つまりpyファイルが直接実行されている時だけ実行されるように付けるのだ、と書いてあるので、別に他からimportする予定のない小物は name == "main"とか書かずに直接命令を書いちゃってるのですが………。このやり方は何か問題あるんでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/09 02:20
2018/11/09 02:25
2018/11/09 04:34