php多任务程序实例解析


Posted in PHP onJuly 19, 2014

本文以实例简单解析了php多任务程序的实现方法,具体代码如下:

<?php
error_reporting(E_ALL);
set_time_limit(0);
/**
* php多任务程序的实现
* 借助proc_open
* 其实该叫进程(process)
* 能启动多进程,你可以使用你的想象力做你想做的了,以后再写个能用的
* 如果你是在linux上跑php,并且启用pcntl模块后,使用pcntl函数该更好
* 
*/
class Thread {
  protected $_pref; // process reference
  protected static $_instance = null;
  protected $_pipes;
  
  private function __construct() {
    $this->_pref = 0;
  }
  
  public static function getInstance($file) {
    if (null == self::$_instance) {
      self::$_instance = new self;
    }
    
    $descriptor = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("file", "./error-output.txt", "a"),
    );
    self::$_instance->_pref = proc_open("php -q $file", $descriptor, self::$_instance->_pipes);
    return true;
  }
  
  public function __destruct() {
    proc_close($this->_pref);
    $this->_pref = null;
  }
}
// 测试代码
$file = __FILE__;
if(empty($argv[1])) {
  $t2 = Thread::getInstance("$file 1");
  $t3 = Thread::getInstance("$file 2");
  $t4 = Thread::getInstance("$file 3");
  $t5 = Thread::getInstance("$file 4");
  $t5 = Thread::getInstance("$file 5");
  $t5 = Thread::getInstance("$file 6");
  $t2 = Thread::getInstance("$file 7");
  $t3 = Thread::getInstance("$file 8");
  $t4 = Thread::getInstance("$file 9");
  $t5 = Thread::getInstance("$file 10");
  $t5 = Thread::getInstance("$file 11");
  $t5 = Thread::getInstance("$file 12");
  echo "Main thread done\n";
} else {
  $somecontent = "\r\n//~~~~~~~~~~~~-这次请求序号是:" . $argv[1];
  sleep(mt_rand(0, 3));
  $handle = fopen($file, 'a+');
  fwrite($handle, $somecontent);
}
PHP 相关文章推荐
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
PHP中mysql_field_type()函数用法
Nov 24 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
PHP串行化与反串行化实例分析
Dec 27 PHP
php删除数组指定元素实现代码
May 03 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
Jun 04 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
Aug 21 PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 PHP
php实现斐波那契数列的简单写法
Jul 19 #PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 #PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 #PHP
CodeIgniter中实现泛域名解析
Jul 19 #PHP
php实现建立多层级目录的方法
Jul 19 #PHP
PHP实现图片压缩的两则实例
Jul 19 #PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 #PHP
You might like
用PHP和ACCESS写聊天室(十)
2006/10/09 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
nodejs开发微博实例
2015/03/25 NodeJs
js实现碰撞检测特效代码分享
2016/10/16 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
django云端留言板实例详解
2019/07/22 Python
Python使用configparser库读取配置文件
2020/02/22 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
XML文档面试题
2015/08/05 面试题
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
生物专业个人自荐信范文
2013/11/29 职场文书
医师定期考核实施方案
2014/05/07 职场文书
民族学专业求职信
2014/07/28 职场文书
七一讲话心得体会
2014/09/05 职场文书
手术室护士个人总结
2015/02/13 职场文书
学校隐患排查制度
2015/08/05 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python