openCV でマルチプロセス化しようとしてもシングルプロセスになっている問題に遭遇
Python で openCV を使った処理をマルチプロセス化してみたのだが、どうもシングルプロセスになってしまうという問題に遭遇した。
解決策:cv2.setNumThreads(0)&マルチプロセスをやめる。
cv2.setNumThreads(0)
を加えて、かつマルチスレッド化(例えば、concurrent.future.ThreadPoolExecuter
など)することで効率的に並列処理可能になることが分かった。
cv2.setNumThreads(0)
有りでもconcurrent.future.ProcessPoolExecuter
では、正しくマルチプロセスされなかった。
以下テンプレート。
import cv2
from concurrent.futures import ThreadPoolExecutor
cv2.setNumThreads(0)
def task_using_cv2(param):
do_some_process_using_cv2()
return
with ThreadPoolExecutor() as executor:
results = list(executor.map(task_using_cv2, param))