• php并发处理


       最近某个项目用php生成文件,但是由于文件量太大,单个进程生成需要很长的时间,所以想并发进行处理。
       网上查找了下相关的资料,php本身是没有多线程的概念的,那就只能用多进程了,再找资料却是有多进程的处理方式。
       首先想到的是pcntl_fork(手册介绍:http://php.net/manual/en/function.pcntl-fork.php)起进程起来并发处理,然后底层做了测试,效果也还不错,但是当通过apache调用的时候却无法运行。然后看到了pcntl_fork手册有下面一句:
    It is not possible to use the function 'pcntl_fork' when PHP is used as Apache module. You can only use pcntl_fork in CGI mode or from command-line.
    Using this function will result in: 'Fatal error: Call to undefined function: pcntl_fork()'
     所以只能想其它方法进行处理了。
       后来查看到可以用popen开进程来处理,然后用feof来确定进程是否结束:
      
    1. foreach ($generateFiles as $generateNumber => $generateMsg) {
    2.          $generateNumberArr[$generateNumber] = popen("php /var/www/html/DNSnew/include/generateZonfConf.php " . $generateMsg . " " . $serial . " " . $forderDir, 'r');    
    3.      }

    4.      foreach ($generateNumberArr as $generateNumberArr_k =>$generateNumberArr_v) {
    5.          while (! feof($generateNumberArr_v)) {
    6.              $buffer = fgets($generateNumberArr_v, 4096);
    7.             if (strstr($buffer, 'ff0000')) {
    8.                 $forderDir = false;
    9.             }
    10.              usleep(100000);
    11.          }
    12.          pclose($generateNumberArr_v);
    13.      }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    windows ntstatus.h 头文件
    Android Q 后台启动 Activity
    windows 删除文件夹所有文件夹及文件代码
    Android 加壳App Demo
    Android App 签名保护demo
    RXAndroidBle 记录网址
    c++ windows 获取系统时间
    js 代码保存
    day33 ansible
    day31 综合实时同步服务
  • 原文地址:https://www.cnblogs.com/stevin-john/p/4768960.html
Copyright © 2020-2023  润新知