質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

5675閲覧

python3 コア数・スレッド数以上の並列処理

lastcoat

総合スコア12

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/04/12 08:31

編集2019/04/12 08:33

Python3のconcurrent.futuresでの並列処理でPCのコア数、スレッド数以上の処理をした場合、処理速度は遅くなってしまうのでしょうか?

やりたいことは

1つ目のプログラム
def func1()
・・・
def func2()
・・・
def func3()
・・・
executor = concurrent.futures.ThreadPoolExecutor(max_workers=3)
executor.submit(func1)
executor.submit(func2)
func3()

2つ目のプログラム
def func5()
・・・
def func6()
・・・
executor = concurrent.futures.ThreadPoolExecutor(max_workers=2)
executor.submit(func5)
func6()

PCのコア数、スレッド数は4つです。
PCが1台しかないのでこれら2つのプログラムを同時に実行したいです。
ついでに実行中にネットサーフィンとかもしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2019/04/12 09:27 編集

回答に移動しました。
guest

回答2

0

幾つか誤解があると思います。

  • CPUのコア数・スレッド数とOS上で走るスレッド数に直接の関係はありません。ソフト的なスレッドはいわば「仮想的な」スレッドです。シングルコアCPUであってもマルチスレッド動作は可能です(個々のスレッドの処理をぶつ切りにして超高速で切り替えながら回す・・・ということをします)。
  • 更にpythonのスレッドはGILというもので制御されており、「pythonの」マルチスレッドはOSから見ればシングルスレッド動作になります。そもそも「pythonの」スレッドで(マルチコアの計算リソースを活用する的な意味での)マルチスレッドによる高速化は図れません。
  • マルチプロセス動作ならマルチスレッドが効きますが、オーバーヘッドもかなり大きいので、けっこう大きな粒度で切り離さないと高速化は大して見込めないと認識してください。
  • 「pythonの」スレッドは並行処理や非同期処理などのためのもので、CPUの計算リソースは消費しないが時間がかかる処理(I/O待ちなど)をパラレルに行うためには有効です。

投稿2019/04/12 09:27

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

処理速度は遅くなってしまうのでしょうか?

確認するにはload averageを見るのがいいのですが、LinuxやBSDの環境ならばwコマンドあるいはtopで見れますが・・・環境が書いてないので・・・Windowsは難しいかもです。load averageの意味はググって見てください。(load average=実行キューに繋がれているプロセス・スレッド数です)

投稿2019/04/12 09:28

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2019/04/12 10:23 編集

あと、Windowsに限らず現在のGUIを使うOSは通常200や300ぐらいのプロセス(スレッド)が動いています。 Linuxmint19.1の何もしていない時(ブラウザとコンソールぐらい)で、スレッド数は260で、CPU0.5% load averageは、 0.23, 0.27, 0.19でした。なので、10や20スレッドが増えても問題ないと思います。画面表示でもすれば、ほっといてもI/O待ちが発生します。  環境:AMD Ryzen5 1600x MEM:16G カーネル:4.18.0-17
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問