popen实现PHP并发方法
2009-08-15 11:46
134 查看
用途: 当业务需要调用一个比较耗时外部资源时使用, 最常见的是从外部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:45
1, 10:16:40
2, 10:16:41
3, 10:16:51
代码方面, 我们有三个sleep。
php中一个 sleep 5,
sh中两个sleep, 10+1
如果使用串行的方式, 那么用时应该是10+1+5 = 16秒。
而使用pipe方式, 用时仅为:max(php, pipe) = max(5,11) = 11秒。
PS:很抱歉,空间服务商看起来不喜欢popen这个字眼, 所以只能将起替换成全角的了。请在使用时,替换一下吧:)
使用方法:
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:45
1, 10:16:40
2, 10:16:41
3, 10:16:51
代码方面, 我们有三个sleep。
php中一个 sleep 5,
sh中两个sleep, 10+1
如果使用串行的方式, 那么用时应该是10+1+5 = 16秒。
而使用pipe方式, 用时仅为:max(php, pipe) = max(5,11) = 11秒。
PS:很抱歉,空间服务商看起来不喜欢popen这个字眼, 所以只能将起替换成全角的了。请在使用时,替换一下吧:)
相关文章推荐
- PHP使用curl_multi实现并发请求的方法示例
- PHP开发中解决并发问题的几种实现方法分析
- PHP解决并发问题的几种实现方法
- php结合redis高并发下发帖、发微博的实现方法
- PHP使用Redis实现防止大并发下二次写入的方法
- php多线程并发实现方法
- php结合redis高并发下发帖、发微博的实现方法
- php实现博客,论坛图片防盗链的方法
- 在PHP中实现按照预定规则自动生成编号的方法
- PHP自动提取文章关键字的实现方法
- php中实现精确设置session过期时间的方法
- 把php代码保存到php文件实现方法
- PHP简单实现解析xml为数组的方法
- PHP使用3种方法实现数据采集
- php生成短网址的思路以及实现方法
- php 不等待返回的实现方法(异步调用)
- php实现比较两个文件夹异同的方法
- PHP实现MySQL事务处理的方法
- php无限级分类实现代码(递归方法)
- PHP 数组和字符串互相转换实现方法