PCNTL在centos中安装以及多进程更新数据

来源:互联网 发布:电脑网络电视直播软件 编辑:程序博客网 时间:2024/06/13 22:28

最近在做项目的时候,需求有所变动,所以要增加单表字段,这就牵扯到了数据表的更新,但表中数据过于庞大不能单进程取更新数据,否则8w条数据得更新大半天。ps:此方法推荐本地自测用,不适合实际项目应用,还有PCNTL只支持linux,所以用win的朋友们还是循环分批更新吧

首先还是linux中PCNTL拓展安装

1、查询自己的php版本号,我用的是phpstudy  php5.4


2、检查是否安装PCNTL扩展(没安装会显示标红段,我已经安装过了)


3、去php.net下载php5.4的tar包(官网现在最低版本的包是5.5版本,所以想要5.3和5.4的请点击下面的链接)

http://pan.baidu.com/s/1geBMW3D        密码:8zd6

4、解压php5.4包


5、解压后进入


6、执行phpize(若执行报错Cannot find autoconf. Please check your autoconf installation and the  $PHP_AUTOCONF environment variable. Then, rerun this script.请看6.1


6.1

# yum install m4

# yum install autoconf

7、执行


8、执行

9、复制pcntl.so到extension下


10、打开php.ini编辑,增加最后一行,保存退出



11、phpinfo查看



安装好后就可以进行下面的操作,sql语句请自行填写


 header('Content-Type:text/html;charset=utf-8;');    set_time_limit(0);    //mysqli连接数据库    $link = mysqli_connect('192.168.0.168','root','root','tsbbc');    if(!$link)    {        printf("Can't connect to Mysql Server Errocode.%s:",mysqli_connect_error());        die;    }    else    {        echo '数据库连接成功<br /><br />';    }    //common_id是主键    $result = mysqli_query($link,$sql);    $row = mysqli_fetch_all($result);    mysqli_close($link);
     echo '开始时间:'.microtime().'<br />';
    //数据大约有80000条    $max = count($row);    $worke = 60;    $pids = array();    for($i = 0;$i<$worke;$i++)    {        $pids[$i] = pcntl_fork();        switch ($pids[$i])        {            case -1:                echo 'fork error'.$i.' <br />';                exit;            case 0:                $param = array(                    'lastid'=>ceil($max/$work*$i),                    'maxid'=>ceil($max/$worke*($i+1))                );                runCommon($row,$param);                exit;            default:                break;        }    }    foreach($pids as $key=>$value)    {        if($value)        {            pcntl_waitpid($value,$status);        }    }
    echo '结束时间:'.microtime();    function runCommon($row,$param)    {        $link = mysqli_connect('192.168.0.168','root','root','tsbbc');        for($i=$param['lastid'];$i<$param['maxid'];$i++)        {
    
            $sql = $sql;            $link->multi_query($sql);        }        mysqli_close($link);    }

原创粉丝点击