파이썬에서 계산 속도를 줄이기 위해 다중 처리를 구현하려고하지만 다중 처리 후에 전체 계산 속도가 크게 줄었습니다. 나는 4 개의 다른 프로세스를 만들었고 4 개의 다른 데이터 프레임으로 dataFrame을 분할했다. 이것은 각 프로세스의 입력이 될 것이다. 각 프로세스를 타이밍 한 후에 오버 헤드 비용이 중요한 것처럼 보이며 이러한 오버 헤드 비용을 줄이는 방법이 있는지 궁금해하고있었습니다.파이썬에서 다중 처리 시간을 단축하는 방법
windows7, python 3.5를 사용하고 있으며 컴퓨터에 8 개의 코어가 있습니다.
def doSomething(args, dataPassed,):
processing data, and calculating outputs
def parallelize_dataframe(df, nestedApply):
df_split = np.array_split(df, 4)
pool = multiprocessing.Pool(4)
df = pool.map(nestedApply, df_split)
print ('finished with Simulation')
time = float((dt.datetime.now() - startTime).total_seconds())
pool.close()
pool.join()
def nestedApply(df):
func2 = partial(doSomething, args=())
res = df.apply(func2, axis=1)
res = [output Tables]
return res
if __name__ == '__main__':
data = pd.read_sql_query(query, conn)
parallelize_dataframe(data, nestedApply)
단일 스레딩이 멀티 프로세싱보다 오래 걸리는 횟수를 나열 할 수 있습니까? – Fruitspunchsamurai
당신은 얼마나 많은 CPU/코어를 가지고 있습니까 (하이퍼 쓰레드가 아닌 실제 것입니까?). CPU 집약적 인 작업처럼 보이므로 코어 수 이상으로 분할하면 작업 속도가 느려집니다. 또한 데이터 프레임의 크기와 doSomething의 비용은 얼마나 큽니까? 데이터 프레임을 각 서브 프로세스로 가져 오려면 직렬화 (pickle을 통해)하고 직렬화를 해제해야합니다. 프레임이 크고'doSomething'이 값이 싼 경우에는 오버 헤드에 소요되는 시간을 대부분 볼 수 있습니다. –
@ Fruitspunchsamurai 단일 스레드를 실행하는 데 26 분이 걸렸지 만 매핑 기능을 실행하는 데 33 분이 걸렸으며 전체적으로 71 분이 걸렸습니다. – Hojin