マルチスレッド
foo
の関数を20回する処理をマルチスレッドで行います。
foo
の処理は待機時間3秒が含まれているので処理時間は最低でも20回×3秒で60秒以上はかかる。
しかし、マルチスレッドで処理すれば、スレッド数に応じて同時に処理してくれるので60秒もかからず処理が終わる。
from concurrent.futures import ThreadPoolExecutor
from time import sleep
def main():
with ThreadPoolExecutor() as executor:
for i in range(20):
executor.submit(foo, i)
def foo(i: int):
sleep(3)
print(f"{i + 1}回目")
if __name__ == "__main__":
main()
スレッド数を指定したいとき(PCが重かったりするとき)は引数に数値を入れる。
(max_workers=はなくてもよい。あってもよい。)
with ThreadPoolExecutor(max_workers=3) as executor:
引数がない場合はそのPCのCPUのスレッド数に応じて同時に処理されるスレッド数が決まる。
それほど古いパソコンでなければスレッド数10以上にはなるでしょう。
なので上記の処理では6秒くらいで処理が終わります。