PythonのマルチスレッドはGILによって基本的に1プロセスで1スレッドしか動かないということなので、あるプログラムを10スレッドで実行したとしても、実行するスレッドは1つでそれを高速に切り替えて平行に実行すると認識しています。
そのような動作ではCPUの計算リソースを多く使う処理をマルチスレッドにしても意味はなく、IO処理などスリープする時間が存在する処理しか高速化が期待できないらしいのですが、
質問としては以下のようにPythonの組み込み関数openを使用した複数ファイルIOをマルチスレッド処理することで高速化は期待できるのでしょうか?
Python
1from concurrent.futures import ThreadPoolExecutor 2 3def read_file(file_name): 4 f = open(filename, "r") 5 text = f.read() 6 f.close() 7 return text 8 9file_list = [str(i) + ".txt" for i in range(100)] 10 11with ThreadPoolExecutor(max_workers=100) as executor: 12 results = executor.map(read_file, file_list) 13 results = list(results)
Pythonの組み込み関数openはマルチスレッドによって高速化されるような、スリープする時間はあるのでしょうか?
また、上の例はファイルの内容を読み込む処理ですが逆にファイルに内容を書き込む処理でも同様でしょうか?
教えてくださるとありがたいです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。