以下参考サイトを参考に、multiproccesingのサンプルプログラムを稼働させたところ、実行1回目は正常に動作したにもかかわらず、どういう訳か幾度目からか正常に動作しなくなりました。
プログラムの内容はサイトの内容とほぼ同じで、違いはtimeをimportしているぐらいです。
Spyderにあるブレークポイントを付けてプログラムを順次追ってみた所、def f1(name):部分からif name == "main":に飛んでいき、そのまま関数内を一切通過せずにp.joinまでプログラムが実行されている様でした。
尚、環境については3ヵ月ほど前に構築してから使用しているもので、新規構成ではありません。
<試したこと>
- Spyderの再起動
- PCの再起動
- カーネルの再起動
- Jupyter Notebook及びIDLEで実行しても状況は変わらず。
- sleepを外した場合は一時停止(3秒ほど)がなくなってすぐさまProcess joined. と表示されます。
参考サイト:https://www.yoheim.net/blog.php?q=20170601
環境:WinPython
Ver:Python3.6.6amd64
IDE:Spyder
python
1from multiprocessing import Process 2import time 3 4# 呼び出したい関数 5def f1(name): 6 print("Hello" + name) 7 print("Sleeping... 3s") 8 time.sleep(3) 9 print("Good morning" + name) 10 11if __name__ == "__main__": 12 # サブプロセスを作成します 13 14 p = Process(target=f1, args=("Bob",)) 15 # 開始します 16 p.start() 17 print("Process started.") 18 # サブプロセス終了まで待ちます 19 p.join() 20 print("Process joined.") 21
実行結果>
Process started.
<3秒ほど一時停止>
Process joined.
理想>
Process started.
Hello Bob
Sleeping... 3s
Good morning Bob
Process joined.
追記>
- python.exeで実行した結果
以下のエラーが出たので、調べてみた所、以下サイト(英語)などの様に似た内容で引っかかっている人がいる様でしたが、今一内容が理解できない為、少し調べます。
https://stackoverflow.com/questions/41385708/multiprocessing-example-giving-attributeerror
Process started.
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\WinPy\python-3.6.6.amd64\lib\multiprocessing\spawn.py", line 105, in spawn_main
exitcode = _main(fd)
File "C:\WinPy\python-3.6.6.amd64\lib\multiprocessing\spawn.py", line 115, in _main
self = reduction.pickle.load(from_parent)
AttributeError: Can't get attribute 'f1' on <module 'main' (built-in)>
Process joined.
追記>
コマンドプロンプトからpythonコマンドで当該サンプルファイルを動かした所、理想通りに動きました。
上記はpython.exe上でサンプルプログラムをコピペして動かした結果でしたので、それで動かなかったのかもしれません。
ただ、そうなるとIDEで動かなかったのがなぜなのか分からず仕舞いです。
追記>
IDEのSpyderに関して、以下サイトではmultiproccesingはiPythonでは動かないとありました。
以下対応をすると、コマンドプロンプトが新たに開かれて実行できることが確認されました。
ただ、そうなると当該プログラムが最初Spyder上で動いたのが謎です。
これ以外にIDEを使っていないので他のIDEと勘違いした事や、コマンドプロンプトから動かす事などないのに・・・。
とりあえず、もう少し調べてみたいと思います。
サイト>https://qiita.com/fiftystorm36/items/26c021c0694aa5d72bed
対応>
実行 -> ファイルごとの設定 -> 外部システムターミナルにチェック
回答1件
あなたの回答
tips
プレビュー