2013-12-16 3 views
0

내 애플리케이션은 API를 반복적으로 폴링하고 이러한 호출로 인해 생성 된 새로운 데이터를 구문 분석하여 해당 데이터를 기반으로 API 요청을 조건부로 처리합니다. 그 처리 시간의 속도는 매우 중요합니다.따뜻한 재사용 가능한 파이썬 프로세스 풀

큰 병목 현상은 실제 생성 된 프로세스 자체의 설정과 관련이있는 것으로 보입니다. 모듈 가져 오기 및 정상 인스턴스화 코드는 중급 Amazon 설정 에서 최대 0.05 초가 걸립니다. 가져 오기/초기화 코드가 이미 완료된 일괄 처리를 ††과 같이 처리하여 결과를 처리하는 것이 도움이되는 것처럼 보입니다. 의 풀 (10-20?)을 생성/전달하는 가장 좋은 방법은 따뜻하고 재사용 가능하며 매우 가벼운 프로세스를 파이썬으로 작성합니까?

† - 예, 문제가 해결 될 때 더 나은 하드웨어를 던지는 것이 도움이된다는 것을 알고 있습니다.

††

이 - 그래, 내가 도움이 될 것입니다 적은 일을 알고, 나는 코드로 간소화 및

+1

소리가 너무 큽니다. –

+1

나는이 quetion의 제목을 실제로 좋아한다! – ixe013

답변

1

그래서 가능한 한 최소한의 제작에서 일하고 있어요, 당신은 것입니다 여기에 학습 곡선에있어,하지만 multiprocessing.Pool() 지정한 여러 프로세스 풀을 만듭니다. initializer= 인수를 사용하여 각 프로세스가 시작할 때 실행할 기능을 지정하십시오. 그런 다음 풀의 프로세스에 작업 항목을 제출하는 데 사용할 수있는 여러 가지 방법이 있습니다. 문서를 읽고, 함께 사용하고, 문제가있을 경우 질문하십시오.

주의 : "매우 가벼운 프로세스"는 불가능합니다. 정의상 프로세스는 "무겁다". "얼마나 무거움"은 운영 체제에 달려 있으며, 사용하는 프로그래밍 언어와는 아무런 관련이 없습니다. 당신이 경량을 찾고 있다면, 당신은 스레드를 찾고 있습니다.

+0

답변 해 주셔서 감사합니다. 아마도 "매우 가벼운"대신에 "극도로 수명이 짧습니다"라고 말해야했습니다. 그러나 두 경우 모두 모든 것이 상대적입니다. –

+0

하지만 "단명"을 원하지 않습니까? 당신이 각 프로세스를 단 한 번만 만들고 새 작업을 사용할 수있을 때 새로운 작업을 받아들이도록하고 싶다는 생각이들 것입니다. "가져 오기/초기화 코드가 이미 처리되고 결과를 처리하기 위해 대기중인 프로세스 일괄 처리"는 정확히'Pool() '이 수행 할 작업입니다. 그것이 당신이 원하는 것이 아닌 경우, 질문을 편집해야합니다 :-) –

+0

오른쪽 - 그들이하는 일의 지속 시간은 짧습니다.하지만 프로세스는 반복적으로 할 수 있어야하고 완료 될 때까지 존재할 수 있어야합니다. 그들과 함께. 너는 완벽하게 이해했다. –