간단한 멀티 프로세싱 테스트를하고 있는데 뭔가 이상한 것처럼 보입니다. 임 터보 부스트와 함께 i5 - 6200U 2.3 GHz에서 이것을 실행합니다.파이썬 다중 처리 - 실행 시간이 늘어났습니다. 무엇을 잘못 했습니까?
from multiprocessing import Process, Queue
import time
def multiply(a,b,que): #add a argument to function for assigning a queue
que.put(a*b) #we're putting return value into queue
if __name__ == '__main__':
queue1 = Queue() #create a queue object
jobs = []
start_time = time.time()
#####PARALLEL####################################
for i in range(0,400):
p = p = Process(target= multiply, args= (5,i,queue1))
jobs.append(p)
p.start()
for j in jobs:
j.join()
print("PARALLEL %s seconds ---" % (time.time() - start_time))
#####SERIAL################################
start_time = time.time()
for i in range(0,400):
multiply(5,i,queue1)
print("SERIAL %s seconds ---" % (time.time() - start_time))
출력 :
PARALLEL 22.12951421737671 seconds ---
SERIAL 0.004009723663330078 seconds ---
도움이 많이 감사합니다.
프로세스를 생성하는 것은 두 개의 작은 정수를 곱하는 것보다 훨씬 비쌉니다. CPU를 사용하는 것보다 훨씬 더 많은 프로세스를 생성합니다 (모든 프로세스가 제한된 CPU주기 동안 서로 경쟁합니다). 속도 향상을 확인하려면 각 작업자 프로세스에서 수행되는 "유용한 작업"이 중요합니다 (프로세스 생성 + 파괴 및 IPC (프로세스 간 통신) 오버 헤드보다 많은 시간이 필요합니다). –
왜 400 개의 프로세스를 만들고 곱하기 값을 대기열에 저장합니까? – haifzhan
그럼 어떻게하면 되겠습니까? 당신은 나를 올바른 자원으로 안내 할 수 있습니까? 수영장이나 다른 것을 사용해야합니까? 나는 정말로 혼란 스럽다. 큐의 값을 저장해야 할 필요가 있습니다. 프로세스의 결과를 얻고, 인터넷 검색을 통해 큐를 처리하는 것처럼 보입니다. – RandN88