멀티 프로세싱을 사용하는 방법을 배우기 시작했습니다. 배우기에 가장 좋은 방법은 몇 가지 시도를하고 어떻게되는지 확인하는 것입니다. 그렇게 했었지 만 첫 번째 시도에서 이해할 수없는 것을 얻었 기 때문에 귀하의 의견이나 귀하의 수정에 감사드립니다.멀티 프로세싱을 이해하려고 시도합니다.
그래서 저는 아주 쉬운 프로그램을 만들었습니다.
from tables import *
import scipy as sc
def getP(pathToTable, p):
with openFile(pathToTable,'r') as f:
tab = f.getNode("/mainTab")
a = [row['value'] for row in tab.where("(page == p) & (ok == 1)")]
print (p, sc.mean(a), sc.std(a))
을 그리고, 그것을 테스트하기 위해,이 같은 일을 오전 : 단일 주어진 매개 변수에 따라 결과를 인쇄
>>> import multiprocessing
>>>pags = [1,2,3,4,5,6,7,8]
>>> te = 'C:\Desktop\testMultiProc.h5'
>>>import testMp as m
>>> for i in pags:
... p = multiprocessing.Process(target=m.getP, args=(te,i))
... p.start()
... p.join()
...
이 작동하고, 나는이 같은 결과를 얻고있다 :
이 왜 순서대로 출력을 얻고, 다음, 동시에 일어나고,내가 잘못 아니에요 경우 ?? :3210
(1, 9.0953793794588282, 0.33533126564851207)
(2, 9.0871612678994946, 0.33453983570210977)
(3, 9.0466206717415556, 0.32227094723414906)
(4, 9.1115445293825204, 0.32247317223440275)
(5, 9.1731876730458826, 0.33230456228097616)
(6, 8.9801903625732713, 0.32238759095899067)
(7, 9.0102797573336719, 0.34441213144617178)
(8, 8.8340961470191885, 0.32342748738790894)
그래서 여기 내 질문을 올 제 말은, p = 3 일 때, p = 3 인 테이블에 값이 거의 없기 때문에 프로세스가 첫 번째로 종료한다고 가정 해 봅시다. 그래서 예를 들어 (3, 9.0466206717415556, 0.32227094723414906)
을 첫 번째 출력으로 얻지 못합니까?
그게 내가 잘못하고 있다고 생각하거나 내가 무슨 일이 일어나고 있는지 아직 이해할 수 없다.
>>> multiprocessing.cpu_count()
8
그래서 내 생각은 8 개 코어의 이익을했다 :
내가 마음에 아이디어 pags = [1,2,3,4,5,6,7,8]
을 선택 .... 내가 먼저 내가했던, 그 때문에했다.
감사 라세는, 그래 그것은 내가 원하는처럼 실제로 소리 : 당신은 모든 하위 프로세스가 완료 될 때까지 대기 할 경우, (검증되지 않은) 같은 것을
multiprocessing.Process
를 호출 결과를 저장하고 별도의 루프에서이 값에 가입 달성하기 위해 모든 프로세스가 동시에 시작되고 실행되도록하고 (일부 처리 시간을 절약하기 위해), 결국에는 모든 프로세스가 완료 될 때까지 기다려야합니다. 매우 특별합니다. "맨 마지막에"Job Finished "라는 메시지가있는 경우, 8 또는 N 프로세스가 모두 완료된 경우에만 표시되어야합니다. – codeKiller