2022/07/08(金) [n年前の日記]
#1 [python] Pythonの並行処理・並列処理について勉強中
Python の並行処理(マルチスレッド)、並列処理(マルチプロセス)について勉強中。
動作確認環境は、Windows10 x64 21H2 + Python 3.9.13。
巷の解説記事内で紹介されてる各サンプルを手元で動かしてみて、マルチスレッドについてはちゃんと動作することを確認できたのだけど。マルチプロセスのサンプルを動かそうとしたら、いきなりエラーが出て悩んでしまった。もしかして、Windows ではマルチプロセスは使えないのだろうか? 試しに Ubuntu Linux 20.04 LTS上で同じスクリプトを動かしてみたら、そちらではすんなり動いてしまった。
どうやら、マルチスレッドはともかく、Windows上ではPythonのマルチプロセスは動かないようだなと…。「Linux や Mac ならマルチプロセスが使えますよ」「Windows? 知らんがな」という状況なのだろう…。
と、一瞬思い込んでしまったのだけど、その後も他の解説記事を眺めて試していたら、Windows上でもマルチプロセスのサンプルが動いてくれた。「Linux でしか使えないよ」というわけではないらしい。
Windows上、かつ、マルチプロセスを使うスクリプトは、以下の記述が無いといかんようで。実処理をトップレベル(?)に書いてしまうとエラーが出てしまう。ただし、Linux上ではトップレベルに書いてしまっても動く、というオチだった模様。
ということで、巷の解説記事内でマルチプロセスのサンプルを見かけて、もし、処理がトップレベルに書かれてたら、上記の記述を追加して動作確認してみると良い、という話になるのだろうなと。
動作確認環境は、Windows10 x64 21H2 + Python 3.9.13。
巷の解説記事内で紹介されてる各サンプルを手元で動かしてみて、マルチスレッドについてはちゃんと動作することを確認できたのだけど。マルチプロセスのサンプルを動かそうとしたら、いきなりエラーが出て悩んでしまった。もしかして、Windows ではマルチプロセスは使えないのだろうか? 試しに Ubuntu Linux 20.04 LTS上で同じスクリプトを動かしてみたら、そちらではすんなり動いてしまった。
どうやら、マルチスレッドはともかく、Windows上ではPythonのマルチプロセスは動かないようだなと…。「Linux や Mac ならマルチプロセスが使えますよ」「Windows? 知らんがな」という状況なのだろう…。
と、一瞬思い込んでしまったのだけど、その後も他の解説記事を眺めて試していたら、Windows上でもマルチプロセスのサンプルが動いてくれた。「Linux でしか使えないよ」というわけではないらしい。
Windows上、かつ、マルチプロセスを使うスクリプトは、以下の記述が無いといかんようで。実処理をトップレベル(?)に書いてしまうとエラーが出てしまう。ただし、Linux上ではトップレベルに書いてしまっても動く、というオチだった模様。
def main(): ... if __name__ == "__main__": main()
ということで、巷の解説記事内でマルチプロセスのサンプルを見かけて、もし、処理がトップレベルに書かれてたら、上記の記述を追加して動作確認してみると良い、という話になるのだろうなと。
◎ 参考ページ。 :
_[Python] スレッドで実装する - Qiita
_PythonのThread(並列処理)は速度改善効果がないので「concurrent.futures」を使う - "BOKU"のITな日常
_Pythonでconcurrent.futuresを使った並列タスク実行 - Qiita
_concurrent.futures: 並行処理 in Python - Heavy Watal
_[Python] multiprocessingを試す (1)
_[Python] multiprocessingを試す (2)
_Pythonの並列処理・並行処理をしっかり調べてみた - Qiita
_【Python】並列処理でプログラムを高速化 | 無次元日記
_Pythonで並列処理のすすめ
_Pythonのthreadingとmultiprocessingを完全理解 - Qiita
_【Python】マルチプロセスについて - Qiita
_PythonのThread(並列処理)は速度改善効果がないので「concurrent.futures」を使う - "BOKU"のITな日常
_Pythonでconcurrent.futuresを使った並列タスク実行 - Qiita
_concurrent.futures: 並行処理 in Python - Heavy Watal
_[Python] multiprocessingを試す (1)
_[Python] multiprocessingを試す (2)
_Pythonの並列処理・並行処理をしっかり調べてみた - Qiita
_【Python】並列処理でプログラムを高速化 | 無次元日記
_Pythonで並列処理のすすめ
_Pythonのthreadingとmultiprocessingを完全理解 - Qiita
_【Python】マルチプロセスについて - Qiita
[ ツッコむ ]
以上、1 日分です。