2017-04-19 6 views
1

파이썬 또는 멀티 프로세싱에서 두 개의 스레드를 사용하여 두 개의 (A & B) 큰 임의 크기 (10^7, 10^12) 벡터를 추가해야합니다. 그런 다음 C에 저장해야합니다. 내 코드도 Time (시간)해야합니다. 마지막으로 최종 벡터로부터 최소 및 평균 수를 찾아야합니다. 나는 많은 일을 시도하고 현재 Anaconda Jupyter 노트북에서 일하고 있습니다. 그것은 코드를 받아들이지 만 나에게 어떤 결과도주지 않습니다. 스레딩/다중 처리/대기열?

은 (파이썬) 프로세스가 분리되어 스스로 사이에 아무것도 공유하지 않기 때문에 당신은 다중의 조작이 종류를 할 수 없어 내 코드

"import time 
import multiprocessing 
import numpy as np 
import threading 
add_result = [] 
a = np.random.rand(10000000) 
b = np.random.rand(10000000) 
def calc_add(numbers): 
global add_results 
for n in numbers: 
    print('add' + str(a+b)) 
    add_result.append(a+b) 
    print('within a process result' +str(add_result)) 
    time.Time = start_time 
if __name__=="__main__": 
arr = a+b 
p1 = multiprocessing.Process(target = calc_add, args = (arr)) 
p2 = multiprocessing.Process(target = calc_add, args = (arr)) 
p1.start() 
p2.start() 
p1.join() 
p2.join() 

print("result" +str(add_result)) 
print("done!") 
+2

질문에 코드를 입력하십시오. – martineau

답변

0

입니다. 즉, 귀하의 global 변수가 두 번째 프로세스 p1에서만 전역 변수라는 것을 의미합니다. 따라서 add_result 변수가 여전히 [[] "과 같습니다.

귀하의 질문에 귀하의 코드를 추가하십시오. 귀하의 코드를 다시 작성하여 다시 작성하도록하십시오.

또한 프로세스 (및 스레드)가 작업에 도움이되지 않는 이유를 더 잘 이해하려면 python의 GIL을 살펴 봐야합니다.