풀을 사용하여 16 개의 프로세서 사이에서 모든 작업을 균등하게 분배하려고합니다. 내가 처음 발견 한 것은 16 개의 프로세스가 생성된다는 것입니다. 몇 초 후에 2 개의 프로세스 만 적은 수의 작업에 대해 나머지 작업을 모두 실행합니다. 아무리로드를 증가 시키더라도 프로세스를 진행하는 프로세스가 줄어들지 않는 것 같습니다. 결국 남은 작업은 1 ~ 2 개의 프로세스 만 통과합니다.작업을 균등하게 분배하지 않는 다중 처리 - Python
다음은 내 코드의 다중 처리 스 니펫입니다.
c_size = len(sampled_patterns)/(cpu_count() -1)
pool = Pool(processes=cpu_count() -1)
works = [(pattern, support_set, hit_rates) for pattern,support_set in sampled_patterns.items()]
pool.starmap(get_hit_rules,works, chunksize=int(c_size))
병렬 처리를 최대화하기 위해 16 개의 프로세서를 모두 사용하고 있습니까? 감사!
편집! 작업을 배포하는 방법입니다. 키로 pid 및 값으로 작업 수로 카운터.
Counter({30179: 14130, 30167: 13530, 30169: 12900, 30173: 12630, 30165: 12465, 30177: 12105, 30163: 11820, 30175: 11460, 30161: 10860, 30181: 10725, 30183: 9855, 30157: 8695, 30159: 6765, 30171: 4860, 30155: 1770})
'chunksize'는 당신이하고있는 일을하지 않고 있습니다 -'it'' iterable을 모든 것 위에 균등하게 덩어리로 나누고 싶다면 풀에있는 숫자 프로세스 (예 :'pool._processes')로 설정하십시오 풀의 프로세스 Tho, 그렇게하고 싶다면 진짜 질문은 어째서 '수영장'이 필요한지입니다. – zwer
감사합니다. 이것은 다중 처리를 사용하는 첫 번째 코드입니다. 코드가 많은 프로세스를 생성하는 것보다 덜 무서운 것처럼 보이기 때문에 저는 Pool을 사용하고 있습니다. 나는 수영장이 저를 위해 그것을 돌볼 것이라고 생각했습니다. 방금 풀 읽기 대 프로세스에 대해 더 나은 방법이 있습니까? – Raja
나는'작품들 '에 수십억 가지의 아이템이있을지라도 수백만 달러를 가질 것이다. 그래서'Pool'은 많은'Process'만큼 스폰하는 것보다 더 적합하다고 생각합니다. – Raja