파이썬에서는 multiprocessing.pool, multiprocessing.Process 를 많이 사용한다.
실행시키고자 하는 함수를 process 에 분배하여 병렬처리 할 수 있다.
def func():
...
pool = Pool(n_cores)
pool.map(func, nums)
pool.close()
pool.join()
Process는 하나의 프로세스에 하나의 함수를 할당하여 실행하는 방식이다.
def func():
...
procs = []
proc = Process(target=func, args=(num,))
procs.append(proc)
proc.start()
Pool은 처리할 일을 바닥에 뿌려놓고 알아서 분산 처리를 하게 만드는 방식이고 Process는 각 프로세스별로 할당량을 명시적으로 정해준 뒤 실행되는 방식이다.
from multiprocessing import Queue
q = Queue()
↓
from multiprocessing import Manager
manager = Manager()
q = manager.Queue()
from functools import partial
from multiprocessing import Pool
def func(input1, input2):
...
PROCESS_COUNT = 10
func2 = partial(func, input2=input2_df)
df_split = np.array_split(input1_df, PROCESS_COUNT)
pool = Pool(PROCESS_COUNT)
final_df = pd.concat(pool.map(func2, df_split))
pool.close()
pool.join()