首页

2010年6月24日星期四

用php中的popen函数实现php的并发处理

用php中的popen函数实现php的并发处理:当我们需要调用一个比较耗时外部资源时使用popen这个函数, 最常见的就是从外部API获取相关内容.使用方法:
1. 建立外部资源脚本。 如示例中使用t.sh。 当然, 也可以直接使用curl等命令行2. 准备好参数, 提供给pipe脚本
2. 使用popen调用脚本。 调用之后,就不用关心了。
3. 开始其他的和pipe不相关的逻辑处理
4. 其他处理完成之后, 使用fgets等方式,
获取popen的数据
php程序:
# get argument for pipe here if it has.
#start pipe
echo ’call popen start: ’. date("H:i:s"), "\n";
$pipe = popen(dirname(__FILE__) . ’/t.sh’, ’r’);
echo ’call popen end: ’. date("H:i:s"), "\n";
#Other code here
sleep(5);
echo "Here is my code. time: " . date("H:i:s"), "\n";
#read pipe result
while ($s = fgets($pipe,1024)) {
echo $s;
}
pipe脚本:
echo 1, `date +%T`;
sleep 1;
echo 2, `date +%T`;
sleep 10;
echo 3, `date +%T`;
输出结果:
call popen start: 10:16:40
call popen end: 10:16:40
Here is my code. time: 10:16:451, 10:16:402, 10:16:413, 10:16:51
结论, 我们有三个sleep。
php中一个 sleep 5,sh中两个sleep, 10+1如果使用串行的方式, 那么用时应该是10+1+5 = 16秒。而使用pipe方式, 用时仅为:max(php, pipe) = max(5,11) = 11秒。

没有评论:

发表评论