Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@aki3061

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

概要

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'

参考文献

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
7
Help us understand the problem. What are the problem?