用法:
$process = new swoole_process(function(){ //这里写业务代码 },true) //开启进程,返回进程pid $pid = $process->start();
实例化时传入第二个参数为 true 时,则表示输出内容到管道
//模拟用进程管理同时请求多个url $workers = []; $urls = [ 'http://www.baidi.com', 'http://www.google.com', 'http://www.sina.com.cn', 'http://www.qq.com', 'http://www.cnblog.com' ]; foreach ($urls as $i => $url) { $process = new swoole_process(function($worker) use($urls,$i){ $content = curlData($urls[$i]); //向管道中写入数据 $worker->write($content); //echo $content; //使用echo可以达到一样的效果 },true); $pid = $process->start(); //将创建好的进程保存在数组中 $workers[$pid] = $process; } // ---------- 等待所有进程结束后再执行后面代码 --------- foreach ($workers as $process) { //从管道中读取数据 echo $process->read(); //回收子进程 $process::wait(); } //模拟请求数据过程 function curlData($url){ sleep(1); return $url ."SUCCESS" . PHP_EOL; }
上面代码执行总耗时 1s ,由此可见多进程大大提高了效率
此外,在创建的子进程中还可以调用外部程序
$process = new swoole_process('callback_function', true); $pid = $process->start(); function callback_function(swoole_process $worker) { $worker->exec('/usr/local/bin/php',array(__DIR__.'/swoole_server.php')); }
注意:
exec()方法第一个参数为执行文件的路径,必须为绝对路径
第二个参数为数组,为执行文件的数组