Swoole 进程管理
2024-10-16 22:17:20
用法:
$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()方法第一个参数为执行文件的路径,必须为绝对路径
第二个参数为数组,为执行文件的数组
最新文章
- Eclipse for Java EE软件操作集锦(二)
- AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(四):开源的Silverlight运行容器的编译、配置
- 子类重载父类的方法“parent::方法名”转于 恩聪PHP学习教程
- Pop - Facebook 开源 iOS &; OS X 动画库
- AccessHelper
- sort+awk+uniq三者结合使用
- 一个快速查看API的汇编和机器码的工具.发布源码
- Asp.net vNext 学习1
- Java中设计模式之单例设计模式-1
- mysql 存储过程 实现数据同步
- SQL Server数据库读写分离提高并发性
- java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
- .NET 中的序列化 &; 反序列化
- 【python】web开发
- crawler_exa2
- 分布式计算框架Spark
- rosetta mpi error: protocols.jobdist.JobDistributors:(0)Master Node -- Waiting for job request:tag=1
- 解析Google集群资源管理系统Omega
- 环境变量篇getenv putenv setenv
- python学习之路-day8