Есть скрипт, вроде работает, но пропускает от 1-5% запросов, а нужно чтобы были загружены 100%
В чем может быть причина?Или какая-то альтернатива?
const THREADS = 30;
const TIMEOUT = 20;
unset($urls_pack);
$data = [];
$urls_pack = [ ];
for( $i = 0; $i < count( $org_data ); $i = $i + THREADS ) {
$urls_pack[] = array_slice( $org_data, $i, THREADS );
}
foreach( $urls_pack as $pack ) {
$mh = curl_multi_init();
unset( $conn );
foreach( $pack as $i => $url ) {
$conn[ $i ] = curl_init( trim( $url[ 'url' ] ) );
curl_setopt( $conn[ $i ], CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $conn[ $i ], CURLOPT_TIMEOUT, TIMEOUT );
curl_setopt( $conn[ $i ], CURLOPT_HEADER, false);
curl_multi_add_handle( $mh, $conn[ $i ] );
}
$active = null;
do {
usleep( 5000 );
$mrc = curl_multi_exec( $mh, $active );
} while ( $mrc == CURLM_CALL_MULTI_PERFORM );
while ( $active && $mrc == CURLM_OK ) {
if ( curl_multi_select( $mh ) == -1 ) {
usleep( 10000 );
}
do {
$mrc = curl_multi_exec( $mh, $active );
} while ( $mrc == CURLM_CALL_MULTI_PERFORM );
}
foreach( $pack as $i => $url ) {
$result = curl_multi_getcontent( $conn[ $i ] );
$current_data = json_decode( $result, true );
if( !$current_data ) {
continue;
}
foreach( $current_data as $item ) {
.........
}
}
curl_multi_close( $mh );
}