Swoole多进程导出

博客指出代码只能在命令模式执行,不能用于web调用请求导出。通过开启五个进程导出一百万数据,约用时10秒,每个进程负责导出215000的数据量,并表示将直接展示代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:该代码只能在命令模式下执行。不能在web调用请求导出。
开启五个进程,导出一百万数据,大概用了10秒的时间。一个进程负责导出215000的数据量。
直接看代码:

<?php

$start_time = microtime(TRUE);

$max_num = 5;

$process_pool = array();


for($i=1;$i<=$max_num;$i++){

    //父子进程共享一个mysql连接。会使mysql失去连接

    $process = new swoole_process(function(swoole_process $process){

        //在每个子进程,单独连接
        $conn = new PDO("mysql:host=localhost;dbname=patent", 'root', 'root');//连接数据库

        $current = $process->read();//读取管道信息,用于计算导出的起点

        $file = fopen('./excel' .$current . '.xls', 'w');//准备写入的文件
        fwrite($file, "id\tname\tage\tscore\tcreate_time\t\n");

        //查询数据
        $offset = ($current - 1) * 215000;
        $sql = "select * from dp_admin_test limit $offset,215000";
        $stmt = $conn->query($sql);
        $data  = $stmt->fetchAll(2);

        foreach($data as $k => $row){
            //写入文件
            fwrite($file, $row['id']."\t".$row['name']."\t".$row['age']."\t".$row['score']."\t".$row['create_time']."\n");
        }

        //断开mysql 连接,关闭文件
        $conn = null;
        fclose($file);


    },true);

    $pid = $process->start();

    $process->write($i);

    $process_pool[$pid] = $process;

}



// 等待子进程结束,回收资源
for($i = 1; $i <= $max_num; $i++){
    $ret = swoole_process::wait();
    unset($process_pool[$ret['pid']]);
    echo "子进程".$ret['pid']."退出\n";
}

$end_time = microtime(TRUE);
//计算总耗时
echo sprintf("use time:%.3f s\n", $end_time - $start_time);


//将导出的文件装入压缩包当中
for($i=1;$i<=$max_num;$i++){
    //装入压缩包中
    $zip = new \ZipArchive();
    $zpFileName = 'excel.zip';
    $zip->open($zpFileName, \ZipArchive::CREATE);   //打开压缩包
    $zip->addFile('excel'.$i.'.xls');   //向压缩包中添加文件
    $zip->close();  //关闭压缩包
}
``
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值