Php多进程实现代码

php多进程实现

PHP有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能在nginx系统中实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。

CentOS 6 下yum安装php的,默认是不安装pcntl的,因此需要单独编译安装,首先下载对应版本的php,解压后

cd php-version/ext/pcntl
phpize
./configure && make && make install
cp /usr/lib/php/modules/pcntl.so /usr/lib64/php/modules/pcntl.so
echo "extension=pcntl.so" >> /etc/php.ini
/etc/init.d/httpd restart

方便极了。

下面是示例代码:

<?php
header('content-type:text/html;charset=utf-8' ); 

// 必须加载扩展
if (!function_exists("pcntl_fork")) {
 die("pcntl extention is must !");
}
//总进程的数量
$totals = 3;
// 执行的脚本数量
$cmdArr = array();
// 执行的脚本数量的数组
for ($i = 0; $i < $totals; $i++) {
 $cmdArr[] = array("path" => __DIR__ . "/run.php", 'pid' =>$i ,'total' =>$totals);
}
 /*
展开:$cmdArr
Array
(
 [0] => Array
 (
  [path] => /var/www/html/company/pcntl/run.php
  [pid] => 0
  [total] => 3
 )
 [1] => Array
 (
  [path] => /var/www/html/company/pcntl/run.php
  [pid] => 1
  [total] => 3
 )
 [2] => Array
 (
  [path] => /var/www/html/company/pcntl/run.php
  [pid] => 2
  [total] => 3
 )
)
*/ 

pcntl_signal(SIGCHLD, SIG_IGN); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。
foreach ($cmdArr as $cmd) {
 $pid = pcntl_fork(); //创建子进程
 //父进程和子进程都会执行下面代码
 if ($pid == -1) {
 //错误处理:创建子进程失败时返回-1.
 die('could not fork');
 } else if ($pid) {
 //父进程会得到子进程号,所以这里是父进程执行的逻辑
 //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:
 pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。
 } else {
 //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
 $path = $cmd["path"];
 $pid = $cmd['pid'] ;
 $total = $cmd['total'] ;
 echo exec("/usr/bin/php {$path} {$pid} {$total}")."\n";
 exit(0) ;
 }
}
?>

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • PHP实现数据库的增删查改功能及完整代码

    本文用到:jquery.tp框架 TP_3.2.2/Application/Home/Controller/StuController.class.php <?php /** * Created by PhpStorm. * User: root * Date: 2018/4/17 * Time: 16:32 */ namespace Home\Controller; use Think\Controller; class StuController extends Controller { p

  • php无限级评论嵌套实现代码

    我在设计BB的过程中,也一直在思考是否可以不通过递归来实现无限级分类的结构展现和父子结构查找,因为如果不对这里的算法进行优化后果可能是致命的!试想一下,一篇文章如果评论数为300,按正常的递归算法,至少就得查询数据库301次,而且还是在没有任何嵌套的情况下,如果有过一两级嵌套或者评论数过1000,那数据库不是直接宕掉? 而实际上,PHP强大的数组处理能力已经能帮助我们快速方便的解决这个问题.下图为一个无限级分类的 数据库结构: IDparentID newsID commts 108文章ID为8

  • PHP多维数组指定多字段排序的示例代码

    介绍array_multisort方法 array_multisort - 对多个数组或多维数组进行排序.其php 手册中的说明如下: 复制代码 代码如下: bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] ) 参数 arr 要排序的一个 array. arg 接下来的每个参数可以是另一个 array 或者是为之前 array 排序标

  • 如何避免PHP实例代码中的一些坏代码

    做PHP开发已经有快一年的时间了,在这一年的时间中,学习了很多生产环境中的技巧,学习了很多东西,期间也阅读了一些优秀的源码和关于代码的书,对写代码这一块有了一定的思考,也看过很多别人写的好的代码和坏的代码,这里说说自己的感悟和改进吧. 本篇博客直说自己的感悟,在写代码时,我给自己立下的规则,这样可以让代码清晰可读并少走一些坑.这些简单的规则虽然没有设计模式看起来那么激动人心,但是,平常注意可以让代码看起来很清爽. 1. 不要在对象外使用未声明的变量 这个问题其实表述起来可能不容易理解.这个问题是

  • PHP 获取视频时长的实例代码

    具体代码如下所示: /* * 获得视频文件的缩略图和视频长度 * @date 2018-05-16 * @copyright */ //获得视频文件的总长度时间和创建时间 根据视频长度判断是否失效 public function getTime($url) { //获取视频重定向后的链接 $location = locationUrl($url); //获取视频Content-Length $responseHead = get_data($location); $list1 = explode

  • PHP生成(支持多模板)二维码海报代码

    增加模板: 1.qrcode.*** 开头的 文件夹,比如:qrcode.demoABC 2.在第一步创建的文件夹中配置文件config.php,以上面的例子为:qrcode.demoABC/config.php <?php return array( //二维码部分 'level' => "L", //二维码校正级别,可选:L.M.Q.H 'matrix' => 6, //矩阵的大小, 1-10 'type' => 'png', //二维码 输出类型 /**

  • PHP 计算两个特别大的整数实例代码

    废话不多说了,具体代码如下所示: function getIntAdd($a,$b){ $c = ''; $bCount = strlen($b); $aCount = strlen($a); $count = max($bCount,$aCount); $aDiff = $count - $aCount; $bDiff = $count - $bCount; for($i = $count - 1;$i >= 0;$i--){ $aVal = $count - $i <= $aCount ?

  • PHP实现Huffman编码/解码的示例代码

    Huffman 编码是一种数据压缩算法.我们常用的 zip 压缩,其核心就是 Huffman 编码,还有在 HTTP/2 中,Huffman 编码被用于 HTTP 头部的压缩. 本文就来用 PHP 来实践一下 Huffman 编码和解码. 1. 编码 字数统计 Huffman编码的第一步就是要统计文档中每个字符出现的次数,PHP的内置函数 count_chars() 就可以做到: $input = file_get_contents('input.txt'); $stat = count_cha

  • python多进程并行代码实例

    这篇文章主要介绍了python多进程并行代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码: from multiprocessing import Process import sys, os import time def timetask(string): while True: print(string) def works(func, arg, worknum): proc_record = [] for i in rang

  • Php多进程实现代码

    php多进程实现 PHP有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能在nginx系统中实现跟c一样的创建子进程.使用exec函数执行程序.处理信号等功能. CentOS 6 下yum安装php的,默认是不安装pcntl的,因此需要单独编译安装,首先下载对应版本的php,解压后 cd php-version/ext/pcntl phpize ./configure && make && make install cp /usr/li

  • 处理python中多线程与多进程中的数据共享问题

    之前在写多线程与多进程的时候,因为一般情况下都是各自完成各自的任务,各个子线程或者各个子进程之前并没有太多的联系,如果需要通信的话我会使用队列或者数据库来完成,但是最近我在写一些多线程与多进程的代码时,发现如果它们需要用到共享变量的话,需要有一些注意的地方 多线程之间的共享数据 标准数据类型在线程间共享 看以下代码 #coding:utf-8 import threading def test(name,data): print("in thread {} name is {}".fo

  • 解决pytorch trainloader遇到的多进程问题

    pytorch中尝试用多进程加载训练数据集,源码如下: trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=3) 结果报错: RuntimeError:          An attempt has been made to start a new process before the         current process has finished it

  • 用map函数来完成Python并行任务的简单示例

    众所周知,Python的并行处理能力很不理想.我认为如果不考虑线程和GIL的标准参数(它们大多是合法的),其原因不是因为技术不到位,而是我们的使用方法不恰当.大多数关于Python线程和多进程的教材虽然都很出色,但是内容繁琐冗长.它们的确在开篇铺陈了许多有用信息,但往往都不会涉及真正能提高日常工作的部分. 经典例子 DDG上以"Python threading tutorial (Python线程教程)"为关键字的热门搜索结果表明:几乎每篇文章中给出的例子都是相同的类+队列. 事实上,

  • 分享PHP-pcntl 实现多进程代码

    PHP使用PCNTL系列的函数也能做到多进程处理一个事务.比如我需要从数据库中获取80w条的数据,再做一系列后续的处理,这个时候,用单进程?你可以等到明年今天了...所以应该使用pcntl函数了. 下面我们来看个实例 代码 <?php $arChildId = array(); for($i = 0; $i < 10; $i++) { $iPid = pcntl_fork(); if($iPid == -1) { die('can\'t be forked.'); } if($iPid) {

  • Python多进程同步简单实现代码

    本文讲述了Python多进程同步简单实现代码.分享给大家供大家参考,具体如下: #encoding=utf8 from multiprocessing import Process, Lock def func(lock, a): lock.acquire() print a lock.release() if __name__ == '__main__': lock = Lock() workers = [] # 创建两个进程 for i in range(0, 2): p = Process

  • Python并发之多进程的方法实例代码

    一,进程的理论基础 一个应用程序,归根结底是一堆代码,是静态的,而进程才是执行中的程序,在一个程序运行的时候会有多个进程并发执行. 进程和线程的区别: 进程是系统资源分配的基本单位. 一个进程内可以包含多个线程,属于一对多的关系,进程内的资源,被其内的线程共享 线程是进程运行的最小单位,如果说进程是完成一个功能,那么其线程就是完成这个功能的基本单位 进程间资源不共享,多进程切换资源开销,难度大,同一进程内的线程资源共享,多线程切换资源开销,难度小 进程与线程的共同点: 都是为了提高程序运行效率,

  • php实现 master-worker 守护多进程模式的实例代码

    具体代码如下所示: <?php class Worker{ public static $count = 2; public static function runAll(){ static::runMaster(); static::moniProcess(); } //开启主进程 public static function runMaster(){ //确保进程有最大操作权限 unmask(0); $pid = pcntl_fork(); if($pid > 0){ echo "

  • python实现多进程代码示例

    想要充分利用多核CPU资源,Python中大部分情况下都需要使用多进程,Python中提供了multiprocessing这个包实现多进程.multiprocessing支持子进程.进程间的同步与通信,提供了Process.Queue.Pipe.Lock等组件. 开辟子进程 multiprocessing中提供了Process类来生成进程实例 Process([group [, target [, name [, args [, kwargs]]]]]) group分组,实际上不使用 targe

随机推荐