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)

実行結果はfunc1func2が交互にprintされるだけなので割愛します。
終了はコマンドを落として強制終了するしかないです。仕方ない。

まとめ

今回はマルチスレッドについて調査してみました。
Pythonでマルチスレッド、マルチプロセスはやり方を間違うとあまり使う意味ないので
そこらへんも今後いろいろいじってみます。