2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonマルチスレッドThreadPoolExecutor

Posted at

マルチスレッド

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秒くらいで処理が終わります。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?