3
7

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 5 years have passed since last update.

Python3での並行・並列処理の選択肢(2018/03)

Last updated at Posted at 2018-03-24

概要

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'

参考文献

3
7
1

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
3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?