pythonでよく使う処理を関数として作成し、他のプログラムから呼び出すことができます。
main.py
import a #a.pyをモジュールとして読み込む import b #b.pyをモジュールとして読み込む a.function() print("a is done.") b.function() print("b is done.")
a.py
print("start a.") def function(): print("This is a.") if __name__ == ‘__main__’: print("a is main.") function()
b.py
print("start b.") def function(): print("This is b.") if __name__ == ‘__main__’: print("b is main.") function()
このように、3つのpythonプログラムを作成し、同じフォルダに格納します。
a.py を実行すれば、
start a. a is main. This is a.
という風に実行されます。b.pyも同様。
main.py を実行すると、main.pyが実行され、a.pyとb.pyが呼び出されます。
start a. start b. This is a. a is done. This is b. a is done.
しかし、単独にa.pyとb.pyを実行したときと異なり、main.pyを実行したときは、"a is main."、"b is main."は実行されません。
これは、"if __name__ == '__main__':"の中にあるためです。
"if __name__ == '__main__':"は直接a.pyまたはb.pyを実行したときに実行されます。
一方、main.pyを見ると
a.function() print("a is done.") b.function() print("b is done.")
a.function()、b.function()と直接、a.py、b.pyのfunction()を実行しているように見えますが、
実は、これらの前に記述されている
print("start a.")、 print("start b.")は実行されます。
実は、
import a #a.pyをモジュールとして読み込む import b #b.pyをモジュールとして読み込む #a.function() print("a is done.") #b.function() print("b is done.")
とすると、
start a. start b. a is done. b is done.
モジュールとして呼び込むと、その時点で、
if __name__ == ‘__main__’:
以外の部分が実行されるのです。
通常、pythonのプログラムを同時に複数実行することはできませんが、このようなことに気をつけさえすれば、main.py(親プロセスと呼ぶ)から呼び出すことで、2つ以上のプログラムを実行させることができます。
それぞれの起動条件はmain.pyの中でfunction()の起動条件として設定します。