■ はじめに
Python の 並行 / 並列処理(※)について、学ぶ。 ※ 並列処理 について 別のCPUコアの 別のpythonプロセスで 複数の処理を同時に行う
■ Python での並列処理
https://docs.python.org/ja/3/library/concurrency.html
より抜粋 ~~~~ 【1】multiprocessing 【2】concurrent.futures など ~~~~ 標準ライブラリ以外にも色々あるみたい
【1】multiprocessing
* Python2系列では2.6以降,3系列では3.0以降 * 標準ライブラリ
公式サイト
https://docs.python.org/ja/3/library/multiprocessing.html
使用上の注意
1)メインモジュールが必要
* 「if __name__ == "__main__":」が必要
2)メモリ消費が激しい
* 基本的に必要なデータがすべてコピーされるので、 メモリ消費を気を付ける
https://www.haya-programming.com/entry/2017/02/09/190512#multiprocessing%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AA%E3%82%89%E4%BD%BF%E3%81%86%E3%81%AE%E3%82%92%E3%82%84%E3%82%81%E3%82%8B%E3%81%82%E3%82%8B%E3%81%84%E3%81%AF%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E6%95%B0%E3%82%92%E6%B8%9B%E3%82%89%E3%81%99
https://www.haya-programming.com/entry/2018/12/28/203555
サンプル
例1:Hello world
from multiprocessing import Pool def func(x): return x*x if __name__ == '__main__': with Pool(processes=3) as pool: print(pool.map(func, [1, 2, 3])) # 出力結果 [1, 4, 9]
【2】concurrent.futures
* From Python3.2
公式サイト
https://docs.python.org/ja/3/library/concurrent.futures.html
サンプル
例1
from concurrent.futures.process import ProcessPoolExecutor import time def task(index): time.sleep(1.0) print("{}".format(index)) if __name__ == "__main__": with ProcessPoolExecutor() as executor: for i in range(3): executor.submit(task, i) # ランダムで「0」「1」「2」が出力 print("Done")
例2:future
from concurrent.futures import ThreadPoolExecutor def task(value1, value2): return "{}, {}!".format(value1, value2) futures = [] with ThreadPoolExecutor(3) as executor: for i in range(3): future = executor.submit(task, "Hello", i) futures.append(future) for future in futures: print(future.result()) # 「Hello, 0!」「Hello, 1!」「Hello, 2!」
参考文献
【1】multiprocessing
https://qiita.com/studio_haneya/items/1cf192a0185e12c7559b
https://qiita.com/yukiB/items/203a6248c2d466b80d38
https://minus9d.hatenablog.com/entry/2017/10/26/231241
https://www.yoheim.net/blog.php?q=20170601
https://gihyo.jp/dev/serial/01/pythonhacks/0005
【2】concurrent.futures
https://dev.classmethod.jp/articles/error-python-process-pool-executor/
https://qiita.com/tag1216/items/db5adcf1ddcb67cfefc8
https://qiita.com/kokumura/items/2e3afc1034d5aa7c6012
https://qiita.com/y518gaku/items/7a59be2b67e92f1ac30e