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

最近在做项目的时候,需求有所变动,所以要增加单表字段,这就牵扯到了数据表的更新,但表中数据过于庞大不能单进程取更新数据,否则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);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值