5
두 개의 인수를 취하여 multiprocessing.Pool
에 추가하고 병렬화 할 수있는 함수를 작성하려고합니다. 이 간단한 함수를 작성할 때 몇 가지 문제가있었습니다.파이썬 : 맵 및 다중 처리 사용
df = pd.DataFrame()
df['ind'] = [111, 222, 333, 444, 555, 666, 777, 888]
df['ind1'] = [111, 444, 222, 555, 777, 333, 666, 777]
def mult(elem1, elem2):
return elem1 * elem2
if __name__ == '__main__':
pool = Pool(processes=4)
print(pool.map(mult, df.ind.astype(int).values.tolist(), df.ind1.astype(int).values.tolist()))
pool.terminate()
오류를 반환 것 :
TypeError: unsupported operand type(s) for //: 'int' and 'list'
내가 잘못 이해 할 수 없다. 누구든지이 오류의 의미와 해결 방법을 설명 할 수 있습니까?
테스트 케이스를 설치하는 것이 좋습니다. 내부적으로'pandas'가 GIL을 피하고 C 언어로 처리 할 수 없습니까? 풀 만들기와 오버 헤드를 조정하는 것이 이것이 OP의 어려움을 수정 함에도 불구하고 현명하지 못한 접근이라는 것을 의미합니까? – roganjosh
나는 Pandas에서 적절하게 입력을 만들어 더 잘 확장 할 수있는 방법이있을 것이라고 확신합니다. 오버 헤드가가는 한, 아마도 특정 애플리케이션 일 것이기 때문에 대답하기가 어려울 것입니다. 솔직하게 말하면, 멀티 프로세싱을 사용하는 데있어서 약간 새로운 것이므로 귀하의 질문에 대한 최선의 대답을 알 수 없을 것이라고 생각합니다. 그러나, 나는 OP가 가지고있는 특정한 문제점에 부딪쳤다. – tmwilson26
나는 오늘 밤 내 자신의 테스트 케이스를 얻을 수 없을지 모르지만 나는 조사 할 것이다. 다중 프로세스는 프로세스 생성에 커다란 오버 헤드를 가지고 있으며,이 접근 방식을 무효화 할 때까지 간단하게 벡터화 할 수 있다는 것을 알고 있습니다. 당신이 깔끔하게 질문에 대답하기 때문에 나는 upvoted, 나는 단지 접근의 전제가 결함이 있다고 생각하지만, 스스로 학습 :) – roganjosh