php多线程处理

阅读 21

2024-11-20

$url_arr = array();
for ($i=0;$i<50;$i++){
    $url_arr[] = "www.baidu.com?wd=".$i;
}
$url_arr = splitArray($url_arr,5);
echo "start:".date("Y-m-d H:i:s").PHP_EOL;
$workers = array();
for ($i=0;$i<5;$i++){
    $process = new swoole_process('getContents',true);
    $process->start();
    $process->write($i);
    $workers[] = $process;
}
//主进程数据结果
foreach ($workers as $process){
    echo $process->read();
    echo PHP_EOL;
}
echo "end:".date("Y-m-d H:i:s").PHP_EOL;
function getContents(swoole_process $worker){
    $i = $worker->read();
    execCurl($i);
    echo PHP_EOL;
}
function execCurl($i){
    sleep(2);
    global $url_arr;
    for ($x=0;$x<count($url_arr[$i]);$x++){
        $a = $url_arr[$i][$x];
        echo $a.'---------';
        file_put_contents('uuu.txt',$a.'-----',FILE_APPEND);
    }

}

/**
 *
 * 把数组按指定的个数分隔
 * @param array $array 要分割的数组
 * @param int $groupNum 分的组数
 */
function splitArray($array, $groupNum){
    if(empty($array)) return array();
    //数组的总长度
    $allLength = count($array);
    //个数
    $groupNum = intval($groupNum);
    //取余
    $yu = (int)($allLength%$groupNum);
    //取整
    $zheng = (int)(($allLength-$yu)/$groupNum);
    //结果集
    $result = array();
    //算出小数组可以有几个元素
    $s = array();
    if($yu > 0){
        for ($i=0; $i <$groupNum; $i++) {
            $s[$i] = $zheng;
            if($yu>=1){
                $s[$i] = $s[$i]+1;
            }
            $yu = $yu-1;
        }
    }else{
        return array_chunk($array, $zheng);
    }
    foreach ($s as $k => $v) {
        for ($i=0; $i < $v; $i++) {
            $result[$k][] = array_shift($array);
        }
    }
    return $result;
}

精彩评论(0)

0 0 举报