概要
2018年3月現在において、Python 3系の標準ライブラリを使い、並列・並行処理を実装する際の選択肢についてまとめる。
それぞれのモジュールの使い方や実装例については、この記事では紹介しない。
並行処理
threading
スレッドを使い、並行処理を実現する。threadingを使った実装は比較的容易だが(asyncioと比べると)、メモリ使用量などリソース面でのコストが大きい。
詳しくは『Effective Python』の「項目40;多くの関数を平行に実行するにはコルーチンを考える」を参照。
asyncio
Python3.4で追加されたモジュール。Python3での並行処理の標準と言っていいはず。
公式ドキュメントの見出しは、「非同期 I/O、イベントループ、コルーチンおよびタスク」となっている。
多機能で使いこなすのが難しい印象。
(参考)gevent
Python2環境では、イベント駆動の実装によく使われていた。Python3の対応に時間がかかっている印象だったが、今は対応済みのようだ。
今後はasyncioのほうが一般的になっていくと思われる。
並列処理
multiprocessing
APIはthreadingモジュールとよく似ている。こちらはスレッドではなくサブプロセスを使うことで、並列処理を可能にする。
subprocess
Pythonから他のプログラムを実行することで、並列処理を可能にする。
並列処理のためよりも、シェルコマンドの実行などで使うケースのほうが一般的かもしれない。
>>> import subprocess
>>> ret = subprocess.getoutput('date')
>>> ret
'2018年 3月 24日 土曜日 12:43:29 JST'
参考文献
- 『入門Python3』
- 『Effective Python』