2014-09-02 2 views
-2

파이썬에서 병렬 처리를해야하는데 한 가지 어려움을 겪으면서 멀티 프로세싱을 사용할 것입니다. 7 개의 프로세스를 만들고 시작했지만 전체 성능을 내지 못합니다. 왜? 그것은 어떤 오류도 보여주지 않았지만 느리게 동작하고 CPU 성능이 향상되지 않습니다. 몇 가지 제안을하십시오. 멀티 프로세싱은 모든 CPU를 사용하지 않습니다

p1 = Process(target=TestFor1,args =()) 
p2 = Process(target=TestFor2,args =()) 
p3 = Process(target=TestFor3,args =()) 
p4 = Process(target=TestFor4,args =()) 
p5 = Process(target=TestFor5,args =()) 
p6 = Process(target=TestFor6,args =()) 
p7 = Process(target=TestFor7,args =()) 
p1.start() 
p2.start() 
p3.start() 
p4.start() 
p5.start() 
p6.start() 
p7.start() 

p1.join() 
p2.join() 
p3.join() 
p4.join() 
p5.join() 
p6.join() 
p7.join() 

이 TestFor1 감사

- 7, 나는 루프에 대한 개별있다 일곱 개 다른 기능을했다. 12 루프 CPU (12 코어 CPU)를 가지고 있기 때문에이 7 루프를 병렬로 실행하고 싶습니다. 프로세스를 넣으려는 내용을 읽었습니다. 초기화 (자기)도 시작하지만 여전히 CPU 전원을 공급하지 않습니다. 제안 감사합니다.

+0

당신은이 스레드를 살펴이 있어야합니다 :

내 컴퓨터에있는 모든 코어를 사용 http://stackoverflow.com/questions/5784389/using-100-of-all-cores- with-python-multiprocessing – Jerome

+0

읽어 봤지만 충분하지 않았습니다. – dbr

+0

구체적인 예제와 작업중인 OS를 게시해야합니다. 나는 하나를 요리했고 나의 모든 과정은 99 %를 쳤다. BTW, @ Jerk31의 참조에 대한 대답은 다단계 파이프 라인 작업 부하에 대해서만 의미가 있습니다. 그것의 범용 솔루션 아닙니다. – tdelaney

답변

0

모두가 병렬 프로세스를 수행하는 방식에 따라 다릅니다. CPU 집약적 인 작업을 수행하지 않거나 동일한 미디어에 모두 액세스하는 경우 (예 : 동일한 디스크에 쓰기)에는 mp에서 너무 많이 얻을 수 있습니다.

import multiprocessing 

def func(): 
    for i in xrange(10000000): 
     sum(range(100)) 

procs = [] 
for i in xrange(multiprocessing.cpu_count()): 
    p = multiprocessing.Process(target=func) 
    p.start() 
    procs.append(p) 

print 'started', len(procs), 'processes' 

for p in procs: 
    p.join() 
    print 'process done' 

print 'all done' 
+0

답변 주셔서 감사합니다 ..이 프로그램은 또한 내 PC에있는 모든 코어를 사용합니다. 하지만 내 for 루프에있는 모든 CPU의 전원이 안돼 .. 내가 언급 한 것과 같은 방식으로 했어.하지만 왜 모든 코어를 사용하지 않는지 모르겠다. 만약 당신이 어떤 생각을 가지고 있다면 가능성을 공유하십시오. – dbr

+0

@ dbr - 모두 for 루프가하는 일에 달려 있습니다. 문제를 보여주는 for 루프의 작은 예를 게시하거나 그것이하는 일에 대한 세부 정보를 추가 할 수 있습니까? for 루프가 하드 드라이브와 같은 일부 외부 리소스에 액세스하는 경우 속도가 느려집니다. – tdelaney

+0

대답 주셔서 감사합니다 ..하지만 그것을 했어 ..하지만 join()을 사용하지 않고 잘 실행됩니다. start() 다음에 join()을 사용해야합니까? – dbr

관련 문제