前言
現在已有版本 v2,請參考 v2 版本為主。
multiprocessing 的程式模板,
將任務封裝好後,直接丟入 list_tasks 即可自動發揮系統最大效能跑平行運算。
封裝的概念,請務必先自行理解。
範例程式碼
- start_multiprocess.py
請在這邊將所有封裝好的任務存入 list_tasks,
封裝的任務必須至少包含以下兩個函數:
- init(): 初始化變數
- start_progress(): 讓自動化流程分配任務時,開始執行的入口
注意:請勿將 start_progress() 放在 init() 中執行,這樣在宣告階段程式就會先開始跑起來了! 失去了自動分配資源的效果!
import glob
import multiprocessing as mp
from multiprocessing import RLock
from tqdm import tqdm
from multiprocess_task import multiprocess_task
list_tasks = []
# ------------- [YOU ONLY NEED TO SET HERE] ------------- #
# TODO: 將封裝好的任務塞入 list_tasks 中
#---------------------------------------------------------#
if __name__ == '__main__':
tqdm.set_lock(RLock()) # for managing output contention
cpu_count = mp.cpu_count()
print(f" --------------------- [start_multiprocess.py] --------------------- ")
pool = mp.Pool()
res_list = []
for idx in range(len(list_tasks)):
res_list.append(pool.apply_async(multiprocess_task, (idx, len(list_tasks), list_tasks[idx])))
for idx in range(len(res_list)):
res_list[idx].get()
- multiprocess_task.py
基本上不用改,讓他自行分配任務。
import os
import cv2
import glob
from tqdm import tqdm
class multiprocess_task(object):
def __init__(self, idx, total_job, each_task):
each_task.start_progress(total_job)