php 多进程设置,php多进程操作的三个实例
1,php多进程并行操作实例
复制代码 代码示例:
//多进程并行操作
/**
* 入口函数
* 将此文件保存为 ProcessOpera.php
* 在terminal中运行 /usr/local/php/bin/php ProcessOpera.php &
* 查看进程 ps aux|grep php
* edit www.jbxue.com
*/
ProcessOpera("runCode", array(), 8);
/**
* run Code
*/
function runCode($opt = array()) {
//需要在守护进程中运行的代码
}
/**
* $func为子进程执行具体事物的函数名称
* $opt为$func的参数 数组形式
* $pNum 为fork的子进程数量
*/
function ProcessOpera($func, $opts = array(), $pNum = 1) {
while(true) {
$pid = pcntl_fork();
if($pid == -1) {
exit("pid fork error");
}
if($pid) {
static $execute = 0;
$execute++;
if($execute >= $pNum) {
pcntl_wait($status);
$execute--;
}
} else {
while(true) {
//somecode
$func($opts);
sleep(1);
}
exit(0);
}
}
}
?>
2,Linux下PHP多进程的方法分享
PHP多进程:使用PHP的Process Control Functions(PCNTL/线程控制函数)
函数参考:http://www.jbxue.com/shouce/php5/book.pcntl.html
只能用在Unix Like OS,Windows不可用。
编译php时,要加上–enable-pcntl,且推荐仅仅在CLI模式运行,不要在WEB服务器环境运行。
一个PHP多进程的简单例子:
复制代码 代码示例:
declare(ticks=1);
$bWaitFlag = FALSE; /// 是否等待进程结束
$intNum = 10; /// 进程总数
$pids = array(); /// 进程PID数组
echo ("Start\n");
for($i = 0; $i < $intNum; $i++) {
$pids[$i] = pcntl_fork();/// 产生子进程,而且从当前行之下开试运行代码,而且不继承父进程的数据信息
if(!$pids[$i]) {
// 子进程进程代码段_Start
$str="";
sleep(5+$i);
for ($j=0;$j
echo "$i -> " . time() . " $str \n";
exit();
// 子进程进程代码段_End
}
}
if ($bWaitFlag)
{
for($i = 0; $i < $intNum; $i++) {
pcntl_waitpid($pids[$i], $status, WUNTRACED);
echo "wait $i -> " . time() . "\n";
}
}
echo ("End\n");
?>
3,PHP多进程并行执行脚本
php的进程不支持多线程,有些场景为了方便以及提高性能,可以用php实现多进程。
例如:
复制代码 代码示例:
#!/usr/bin/env php
$cmds=array(
array('/apps/bin/launcher.php','charge/promotion_props_stat.php','mobile',1),
array('/apps/bin/launcher.php','charge/promotion_props_stat.php','mobile',2),
array('/apps/bin/launcher.php','charge/promotion_props_stat.php','click',1),
array('/apps/bin/launcher.php','charge/promotion_props_stat.php','click',2),
array('/apps/bin/launcher.php','charge/promotion_props_stat.php',1),
array('/apps/bin/launcher.php','charge/promotion_props_stat.php',2)
);
foreach($cmds as $cmd){
$pid=pcntl_fork();
if($pid==-1){ //进程创建失败
die('fork child process failure!');
}
else if($pid){ //父进程处理逻辑
pcntl_wait($status,WNOHANG);
}
else{ //子进程处理逻辑
pcntl_exec('/usr/local/bin/php',$cmd);
}
}
?>
有关php多进程的例子,就介绍这三个了,希望对大家有所帮助。
php 多进程设置,php多进程操作的三个实例相关推荐
- python多进程原理_python多进程的详细介绍(附示例)
本篇文章给大家带来的内容是关于PHP中的SAPI是什么?如何实现?(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 进程 Python是运行在解释器中的语言,查找资料知道,py ...
- Qt数据库操作(三) -- 使用SQL模型类
文章目录 Qt数据库操作(三) -- 使用SQL模型类 1.SQL查询模型 2.SQL表格模型 3.关系表格模型 Qt数据库操作(三) – 使用SQL模型类 Qt 提供了3个高级的类来访问数据库,分别 ...
- shell模拟php多进程从redis获取数据(多个redis实例)
背景:现在的数据已经写到了redis队列里面,完成了入栈的操作,后期打算从redis获取数据,完成出栈的操作,出栈后然后做一系列的逻辑处理 环境: VMware虚拟机 内存:1G 硬盘:60G ...
- 最近总结了串口(COM)读写操作的三种方式
最近总结了串口(COM)读写操作的三种方式: 第1种方式是采用微软在.NET2.0推出了一个串口控件,SerialPort类,但必须是.NET2.0才可以 第2种方式是用API写串口通信,虽然难度高, ...
- pandas dataframe 使用多进程apply(原生、pandarallel多进程、swifter多进程)
文章目录 标准单进程apply 使用parallel_apply多进程 使用swifter多进程(推荐) 完整代码 参考文章 首先生成数据 def get_data(): # 获得数据源import ...
- oracle级联怎么设置,Oracle级联操作详解
Oracle外键级联删除和级联更新 1 级联删除 在添加foreing key约束时,还可以指定级联操作的类型,主要用于确定当删除(on delete) 附表中的一条记录时,如何处理子表中的外键字段, ...
- linux设置开机自启服务,linux设置服务开机自启动的三种方式
linux设置服务开机自启动的三种方式 这里介绍一下linux开机自动启动的几种方法,共计3种,大家可以借鉴一下!经验里面以centos 5.3系统为例! 方法1:.利用ntsysv命令进行设置,利用 ...
- Java操作Excel三种方式POI、Hutool、EasyExcel
Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...
- 交换机的相关配置---设置终端登录密码和恢复出厂设置的实验操作
交换机的相关配置-设置终端登录密码和恢复出厂设置的实验操作 实验操作要求: 1.为交换机lsw1设置终端登录密码Taren1,退出终端重进以验证登录效果 2.恢复出厂设置,重新进入后观察设备名变化 具 ...
最新文章
- 连接Oracle错误:800a0e7a未找到提供程序的解决
- Centos7+Mysql5.7实现主从复制
- 「BATJ面试系列」并发编程
- Could NOT find SDL_image (missing:SDL_IMAGE_LIBRARIES SDL_IMAGE_INCLUDE_DIRS)
- 一个基于.Net 5开发的轻量级Quartz配置中心 - QuartzCore.Blazor
- org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyR
- Docker快速搭建TeamSpeak多人语音聊天服务器
- 利用汇编挖掘编程语言的本质
- php数组和列表,【PHP基础】1.1 所有数组函数分类与列表(目前可能不全)
- android token机制_Android之window机制token验证
- Linux Netcat command – The swiss army knife of net
- 比Spark更适合工业互联网的数据库——热门时序数据库介绍与核心文档汇总【施工中,欢迎留言加入】
- 做自媒体赚钱,分享一个完整的影视剪辑的基本流程
- 地震数据剖面图-matlab
- 安装和配置fedora19要做的那些事,超值经验
- SVN添加账户及删除MyEclipse中记住的SVN账户名密码信息
- katago安装使用
- 第四范式发布「式说」大模型,以生成式AI重构企业软件(AIGS)
- 【Pygame实战】疫情期间给不能出门的你推荐一款爽游 《消灭病毒保卫城市》【强推】愿早日结束
- mysql打开eqd_备注数据库到MySQL(带CF?)/或如何获得NSF数据结构
热门文章
- 笔记react router 4(三)
- Linux搭建Maven私服, 使项目公用Android aar
- 两个函数彻底理解Lua中的闭包
- spider RPC更新至2.0.0-RELEASE
- Ambari Metrics Monitor/Sink 架构
- 经常使用的时间同步server地址
- 省市区三级联动 数据精确到乡镇一级
- linux c ping实现
- python3 mysql错误 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
- linux 杀软 clamav 帮助选项翻译