[PHP] 使用 pcntl 库实现PHP多进程
最近因项目需要,需要大量同步数据,数据量基数在3000万条左右,因此想到了开启多进程来处理,下面是处理的完整代码,基于laravel 5.1框架。
这是经过实际环境验证过的,所以类似场景可以简单修改下就可使用。
/*** ******数据同步脚本** @author yedonghai*/namespace App\Console\Commands;use DB;use Illuminate\Console\Command;use App\Services\ZzcService;class ZzcSyncCommand extends Command{/*** The name and signature of the console command.** @var string*/protected $signature = 'zzcsync:data';/*** The console command description.** @var string*/protected $description = 'sync zzc apply info';/*** Execute the console command.** @return mixed*/public function handle(){$userNum = 6500000;$workers = 30;$block = 50000;$loop = 0;$flag = 0;$processIds = [];do {$flag = $loop * $workers * $block;for ($i = 0; $i < $workers; $i++) {$minUserId = ($block * $i) + $flag;$maxUserId = $block * ($i + 1) + $flag;if ($minUserId < $userNum) {$processIds[$i] = pcntl_fork();switch ($processIds[$i]) {case -1 :echo "fork failed : {$i} \r\n";exit;case 0 :$this->_userReport($minUserId, $maxUserId);exit;default :break;}} else {break;}}while(count($processIds) > 0) {$mypid = pcntl_waitpid(-1, $status, WNOHANG);foreach ($processIds as $key => $pid) {if ($mypid == $pid || $mypid == -1) {unset($processIds[$key]);}}}$loop++;} while (empty($processIds) && $flag < $userNum);}/*** 子进程获取指定数据** @param integer $minUserId 读取区间的下限* @param integer $maxUserId 读取区间的上限** @return array*/private function _userReport($minUserId, $maxUserId){$users = DB::table('users')->leftJoin('user_credits', 'user_credits.user_id', '=', 'users.id')->select('users.id', 'users.user_name as mobile', 'users.id_number as pid', 'users.truename as name')->where('user_credits.audit_limit', '>', 0)->where('users.id', '>=', $minUserId)->where('users.id', '<', $maxUserId)->get();foreach ($users as $userObj) {$userExist = DB::table('zzc_apply')->where('user_id', $userObj->id)->first();if (!empty((array)$userExist)) {continue;}$userArr = [];$userArr['loan_type'] = '消费贷';$userArr['loan_term'] = '3';$userArr['loan_purpose'] = '购物';$userArr['applicant']['name'] = $userObj->name;$userArr['applicant']['pid'] = $userObj->pid;$userArr['applicant']['mobile'] = $userObj->mobile;$user = json_encode($userArr);$zzcService = new ZzcService();$zzcService->createNezha($user);}}}
[PHP] 使用 pcntl 库实现PHP多进程相关推荐
- 【python第三方库】python多进程编程multiprocessing库和subprocess库的区别与使用
多进程,多线程介绍请阅读blog python多线程编程请阅读blog 文章目录 一.mutiprocessing库与subprocess库的区别 二.multiprocessing使用介绍 1. 创 ...
- 6月12日云栖精选夜读:【干货】iOS 11 短信拦截功能初探
在iOS 11 beta 1出来以后,我们发现新增了SMS fraud extension(恶意短信拦截插件),该插件在经过用户的授权后可以用于拦截用户的恶意短信. 热点热议 [干货]iOS 11 短 ...
- php 多进程 返回值,php多进程
软件简介 php基于pcntl扩展实现的多进程框架. 有以下几种优点: 1.子进程数量的控制 2.钩子形式的运行子进程,方便代码实现 3.3种不同的方式导入任务(数组输入.运行次数输入.动态加载) 4 ...
- 第06讲:多路加速,了解多进程基本原理
在上一课时我们了解了多线程的基本概念,同时我们也提到,Python 中的多线程是不能很好发挥多核优势的,如果想要发挥多核优势,最好还是使用多进程. 那么本课时我们就来了解下多进程的基本概念和用 Pyt ...
- php 多进程 常驻内存,PHP 多进程与信号中断实现多任务常驻内存管理 [Master/Worker 模型]...
本文章基于pcntl扩展做的多进程测试. 进程调度策略 父子进程的调度由操作系统来负责,具体先调度子进程还是父进程由系统的调度算法决定,当然可以在父进程加上延时或是调用进程回收函数pcntl_wait ...
- python编程图文_深入Python多进程编程基础——图文版
多进程编程知识是Python程序员进阶高级的必备知识点,我们平时习惯了使用multiprocessing库来操纵多进程,但是并不知道它的具体实现原理.下面我对多进程的常用知识点都简单列了一遍,使用原生 ...
- 对PHP并发、多进程、多线程、异步处理、分布式系统的一些了解
目录 并发 基本概念 PHP并发模型 多进程 基本概念 进程 多进程 并发多任务 任务调度 PHP实现多进程 PCNTL PHP-FPM Swoole 多线程 基本概念 线程 多线程 PHP实现多线程 ...
- 01.Android崩溃Crash封装库
目录介绍 01.该库具有的功能 02.崩溃处理模块 03.网络分析库模块 04.ping库模块 05.该库如何使用 06.后续的需求说明 07.异常栈轨迹原理 08.部分问题反馈 09.其他内容说明 ...
- python 多进程并发与多线程并发总结
本文对python支持的几种并发方式进行简单的总结. Python支持的并发分为多线程并发与多进程并发(异步IO本文不涉及).概念上来说,多进程并发即运行多个独立的程序,优势在于并发处理的任务都由操作 ...
最新文章
- mysql slave 能写吗_MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
- 产品设计眼中的运营,互联网营销
- 与年轻人“玩在一起”的QQ音乐,正抢跑音娱赛道?
- ElementUI中el-upload怎样上传文件并且传递额外参数给Springboot后台进行接收
- [BZOJ 1048] [HAOI2007] 分割矩阵 【记忆化搜索】
- python标准日期正则表达式_Python 正则表达式验证传统日期
- Javascript乱弹设计模式系列(1) - 观察者模式(Observer)
- react打包后图片丢失_手写Webpack从0编译Vue/React项目
- java识别音调_你如何创建一个音调发生器,其音调可以在java中“实时”或动态地操作?...
- 三层调用关系_你真正的了解MVC三层架构开发模式吗
- 服务器 交换机的维护,服务器路由器交换机维护设置
- callback的实现
- Text Particle Systems
- 《我是一只IT小小鸟》读书笔记
- Android源码下载
- java创建表情包_表情包生成器
- 机器学习数学篇—基础数学知识清单
- 超详细open vn搭建之Linux亲测可用
- Lua 编程学习笔记
- 南京邮电大学微型计算机原理与接口技术实验,南京邮电大学《微机原理与接口技术》上机实验参考答案(四次全).pdf...