2016-11-19 5 views
2

문제점을 해결하려고합니다. 이것에 대한 귀중한 의견을 보내 주시면 감사하겠습니다.많은 파일이있는 다중 처리

문제 설명 : 동일한 기본 디렉토리에서 많은 파일 (10 ** 6)을 읽으려고합니다. 각 파일 패턴 (YYYY-MM-DD-HH)에 일치하는 이름을 가지고 있으며, mm는 하루 vv의 분입니다

mm1, vv1 
mm2, vv2 
mm3, vv3 
. 
. 
. 

을 다음과 같이 파일의 내용은 "일부 숫자 값입니다 그 분과 관련해서. 시작 시간 (예 : 2010-09-22-00)과 종료 시간 (예 : 2017-09-21-23)을 모두 얻으려면 vv의 평균을 찾아야합니다.

기본적으로 사용자는 start_dateend_date을 제공 할 것이고, 주어진 기간 사이의 모든 파일의 평균을 얻어야 할 것입니다. 그래서 내 기능은 다음과 같이 될 것이다 : 나는 작은 조각을 평균하는 멀티 프로세싱을 사용하는 방법을

get_average(start_time, end_time, file_root_directory): 

지금, 내가 이해하고 싶은 것은 다음 최종 값을 얻기 위해 그 위에 구축 할 수 있습니다.

참고 : 선형 솔루션을 찾고 있지 않습니다. 작은 덩어리로 어떻게 문제를 풀었는지에 대한 조언을 한 다음 평균을 찾기 위해 그것을 요약하십시오. 파이썬에서 multiprocessing 모듈을 사용하여 4 개의 프로세스 풀을 만들려고 시도했지만 메모리에 값을 유지하고 모든 청크에 대해 결과를 함께 추가하는 방법을 알 수 없습니다.

+0

매우 광범위하다는 것 외에도 정확하게 알고 싶은 것이 분명하지 않습니다. 즉, 프로세스간에 통신하는 일반적인 (매우 공통적 인) 방법 중 하나는 하나 이상의 '다중 처리 .Queue'객체를 사용하는 것입니다. – martineau

+0

글쎄요, 나는이 성명서가 광범위하다는 데 동의하며, 사실 하나의 파일 시스템이 단일 디렉토리에서 10^6 파일을 처리 할 수 ​​없다는 것에 동의합니다. 그게 내 주요 목표는 여기에 프로토 타입을 구축하는 것입니다 – Geek

답변

0

프로세스가 I/O 경계가 될 것입니다. 멀티 프로세싱은 비생산적인 경우가 아니면 유용하지 않을 수 있습니다.

엄청난 수의 작은 파일을 기반으로하는 스토리지 시스템이 최선이 아닙니다. 당신은 influxdb와 같은 시간 세리 데이타베이스를보아야한다.

+0

프로세스가/O를 바운드가 될 것이라고 동의하지만, 파일과 함께 문제를 해결하기 위해 찾고 있어요. 데이터 생성이 나를 처리하지 않기 때문에 데이터를 db에 저장하는 것은 나를위한 선택 사항이 아닙니다. – Geek

+0

데이터 생성을 처리하지 않더라도 더 쉽게 쿼리 할 수 ​​있도록 처리 할 수 ​​있습니다. 쿼리 패턴에 따라 달라집니다. 한 번 또는 수시로 많은 양의 데이터 또는 스파 스. – Setop

0

실제 처리가 매우 희박한 경우 — 여러 프로세스 또는 스레드를 사용하는 각 파일 —의 합계 및 개수가 많지는 않습니다. 왜냐하면 90 + %의 노력으로 각 파일을 열고 해당 내용을 메모리로 전송하기 때문입니다.

그러나 가장 확실한 파티셔닝은 데이터 파일 별 스키마에 따라 결정됩니다. 따라서 검색 범위가 2010-09-22-00에서 2017-09-21-23 인 경우 시간당 하나의 파일로 총 7,138 개의 파일 (총 2 개의 윤일 포함)이 생성됩니다.

61000 개의 프로세스가 하나의 시스템에서 매우 효과적으로 실행되지 않습니다. — 적어도 지금까지. (아마 몇 년 후 합리적인 기능이 될 것입니다.) 그러나 실제 (비 슈퍼 컴퓨팅) 시스템의 경우, 문제를 몇 개의 세그먼트로 나누십시오. 아마도이 작업을 수행 할 수있는 CPU의 수를 두 배 또는 세 배로 늘릴 수 있습니다. 이 데스크탑 컴퓨터에는 4 개의 코어가 있기 때문에 먼저 1/12의 합계와 개수 (가변적 인 경우 샘플 수)를 각각 독립적으로 계산하는 12 개의 프로세스를 시도합니다.

프로세스 간 통신은 스레드를 사용하여 제거 할 수 있습니다. 또는 프로세스 지향적 인 접근 방식으로 결과를 수신 할 수 있도록 각 프로세스에 파이프를 설정하는 것은 간단합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 61k 과정이 옳지 않다는 것을 이해한다. 나는 또한 4 코어 더 많은 기계를 가지고 있으며, 나는 단지 한 번에 4 개의 프로세스조차도 나에게 좋다. 이 작업을 수행하기 위해 몇 가지 샘플 코드와 라이브러리를 제공해주십시오. 과거에 사용한 블로그 나 온라인 링크를 공유 할 수 있다고해도 큰 감사를 표합니다! – Geek