Pythonのマルチスレッドを試してみた
はじめに
こんにちは、がんがんです。
最近はよくスマブラをしております。
本格的に始めたのはスマブラspからで、以前からやってる友達が強い強い。
卒論の締め切りも迫っておりますので、スマブラは息抜き程度にほどほどにしましょう。
今回はPythonのマルチスレッドconcurrent.futures
について扱った時の備忘録です。
参考記事
Pythonではthreading
がありますが、私が使用しているのはPython3.6
ということで
今回はconcurrent.futures
を用いました。
qiita.com
また、Pythonのドキュメントも貼っておきます。
docs.python.jp
実験
実験としては参考記事の通りです。
実験用のプログラムを当初、threading.py
としていました。
すると、AttributeError: module 'threading' has no attribute '_shutdown'
が出てしまいました。
原因を調べてみると、名前を変えたら大丈夫と発見したので変更しました。
そのときに参考にしたのはこちらです。
qiita.com
stackoverflowにも同様の質問がありましたので、そちらも貼っておきます。
stackoverflow.com
コードは以下のようになっています。
#------------------------------------------------------------ # # Pythonでマルチスレッド # thread_example.py # #------------------------------------------------------------ import time from concurrent.futures import ThreadPoolExecutor def func1(): while True: print("func1") time.sleep(1) def func2(): while True: print("func2") time.sleep(1) if __name__ == '__main__': executor = ThreadPoolExecutor(max_workers=2) executor.submit(func1) executor.submit(func2)
実行結果はfunc1
とfunc2
が交互にprintされるだけなので割愛します。
終了はコマンドを落として強制終了するしかないです。仕方ない。
まとめ
今回はマルチスレッドについて調査してみました。
Pythonでマルチスレッド、マルチプロセスはやり方を間違うとあまり使う意味ないので
そこらへんも今後いろいろいじってみます。