문제

많은 (수천)의 사이트에 대한 업데이트를 확인하는 PHP 스크립트가 있습니다. 때때로 (사이트 수가 증가함에 따라 더 자주), 나는이 사이트 중 하나의 업데이트에서 실행 시간 초과를 얻고 전체 스크립트가 배수구로 내려갑니다.

내가 생각해 낼 수있는 가장 좋은 아이디어는 각 업데이트를 포크하는 것입니다. 따라서 사망하면 전체 업데이트가 계속됩니다. 내가 수집 한 바에 따르면, PHP 스레딩은 특히 Windows 플랫폼에서 의지 할 것이 아닌 것 같습니다 (불행히도 작업해야합니다).

Curl을 포킹 메커니즘으로 사용하는 것에 대해 생각했지만 서버 (시간 및 처리 전력)에 더 많은 비용이 들지 않습니까?

PHP 포킹/스레딩에 대한 아이디어와 경험을 듣고 기쁩니다 ...

고마워, 오메르.

도움이 되었습니까?

해결책 5

글쎄, 결국 나는 컬에 갔다. 그리고 그것은 잘 작동한다.

Mac에서 개발하는 동안 크로스 플랫폼 솔루션이 필요했습니다.이 경우 생산 세르는 Windows입니다. 그것은 의미가 있습니다 pcntl 질문에서 벗어났습니다.

수천 개의 컬 요청을 내 자신의 서버로 보내는 것이 당시 사이트에서 사용자를 귀찮게 할 수 있다고 걱정했지만 실수했습니다.

그러나 나는 추가해야했다 set_time_limit(0) 모든 컬 호출을 시작하는 스크립트에, 그렇지 않으면 시간이 걸립니다.

다른 팁

Curl을 사용하려면 Curl을 간소화하고 사이트 세트와 상호 작용할 수있는 멀티* 메소드 제품군을 살펴보십시오. 즉, 최대 실행 시간 (INI_SET을 통해)을 임의로 높은 수로 설정하고/또는 자신의 감시대 카운터를 유지하여 너무 높게 유지하지 못하게 할 수도 있습니다.

그러나 그렇습니다. 궁극적으로 PHP에서 문제와 전체 스레드 지원이 부족할 것입니다. 따라서 가장 좋은 방법은 기본 스레딩 지원을 제공하는 다른 언어/플랫폼과 같은 다른 대안을 보는 것입니다.

PCNTL Extension을 사용하여 PHP에서 어떤 형태의 스레딩을 얻었으며, 최고의 솔루션은 아니지만 트릭을 수행했습니다.

http://www.php.net/manual/en/ref.pcntl.php

다음 링크도 시도해보십시오. 구현에 대한 방법을 알려주었습니다.

http://www.van-steenbeek.net/?q=php_pcntl_fork

http://www.hudzilla.org/phpbook/read.php/16_1_3

http://www.electrictoolbox.com/article/php/process-forking/

나는 이것이 도움이되기를 바랍니다. 그러나 PHP는 스레딩에 그리 좋지 않습니다.

INI 지시문을 설정할 수 있습니다 max_execution_time MAX 실행 시간을 제거 하고이 오류를 발생시키지 않고 스크립트를 실행할 수 있어야합니다. 그러나이 값은 php.ini 파일에서 설정해야합니다. ini_set 작동하지 않습니다.

set_time_limit(0);

set_time_limit 문서

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top