2011-10-21 3 views
3

다음을 수행하는 크론 작업을 구축 중입니다.
1. 데이터베이스에서 레코드를 받으십시오.
2. 각 레코드에서 API에 컬 요청을 실행하십시오. (일부 요청은 빠르며 일부는 큰 이미지 나 동영상을 업로드하고 있습니다).
3. 요청이 성공적이지 않은 경우 (여전히 레코드를 기반으로 한) 약간 다른 매개 변수를 사용하여 새 요청을 만들어 다시 보냅니다. 이것은 여러 번 발생할 수 있습니다.
4. 요청이 성공하면 일부 DB 선택/삽입 (이 요청을 전송 한 원래 레코드를 기반으로)을 수행합니다.PHP 다중 컬 또는 멀티 스레딩

요청을 보내는 데 몇 분 (대용량 업로드)이 소요되며 일부는 매우 빠르기 때문에 병렬로 요청을 보내야합니다.

DB에서 레코드를 가져오고 각 레코드가 API를 호출하고 응답을 구문 분석하는 프로세스를 만드는 마스터 스크립트가 있어야 가장 적합한 방법은 무엇입니까? curl_multi를 사용하여 동일한 스크립트에서 동시에 여러 요청을 보내고 반환 할 때마다 각각의 요청을 구문 분석 할 수 있습니까?

여러 프로세스를 사용하는 경우 PCNTRL, popen 등이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
curl_multi를 사용하는 경우 어떤 DB 레코드가 어떤 반환 요청에 해당하는지 어떻게 알 수 있습니까?

편집 : 나는 응답 처리를 시작하기 전에 모든 요청을 완료하기 위해 기다릴 것이다 너무 http://www.onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/
: 나는 아마이 techique을 사용하는 것 컬 멀티를 사용하는 경우.

감사합니다.

답변

1

큰 데이터 세트를 처리하면 비슷한 문제가 발생합니다.

나를 위해 가장 간단한 대답은 4 별도의 스크립트, 관련된 DB 컬럼의 특정 네 번째을 위해 작성된 각각 내 경우에는 처리을하거나 귀하의 경우 컬 요청에 만드는 것이 었습니다. 이것은 하나의 프로세스에 대한 큰 요청이 다른 프로세스를 잠그는 것을 방지합니다.

대조적으로 curl_multi를 사용하는 단일 스크립트는 여전히 큰 요청에 대해 잠글 예정이며 한 번에 여러 개의 큐를 대기시킬 수 있습니다.

최적으로 나는 멀티 스레딩에 대한 기본 지원이있는 언어로 이것을 작성하여 해킹에 의지하지 않고 동시에 일어날 수있는 일이 있지만 항상 옵션이되는 것은 아닙니다.

1

결국에는 PCNTRL을 사용하여 다중 처리를 진행했습니다 (동시 처리 수를 제한 함). curl_multi가 수천 건의 요청에 대해 확장되지 않는다고 생각합니다.