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