最近因项目需要,需要大量同步数据,数据量基数在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多进程相关推荐

  1. 【python第三方库】python多进程编程multiprocessing库和subprocess库的区别与使用

    多进程,多线程介绍请阅读blog python多线程编程请阅读blog 文章目录 一.mutiprocessing库与subprocess库的区别 二.multiprocessing使用介绍 1. 创 ...

  2. 6月12日云栖精选夜读:【干货】iOS 11 短信拦截功能初探

    在iOS 11 beta 1出来以后,我们发现新增了SMS fraud extension(恶意短信拦截插件),该插件在经过用户的授权后可以用于拦截用户的恶意短信. 热点热议 [干货]iOS 11 短 ...

  3. php 多进程 返回值,php多进程

    软件简介 php基于pcntl扩展实现的多进程框架. 有以下几种优点: 1.子进程数量的控制 2.钩子形式的运行子进程,方便代码实现 3.3种不同的方式导入任务(数组输入.运行次数输入.动态加载) 4 ...

  4. 第06讲:多路加速,了解多进程基本原理

    在上一课时我们了解了多线程的基本概念,同时我们也提到,Python 中的多线程是不能很好发挥多核优势的,如果想要发挥多核优势,最好还是使用多进程. 那么本课时我们就来了解下多进程的基本概念和用 Pyt ...

  5. php 多进程 常驻内存,PHP 多进程与信号中断实现多任务常驻内存管理 [Master/Worker 模型]...

    本文章基于pcntl扩展做的多进程测试. 进程调度策略 父子进程的调度由操作系统来负责,具体先调度子进程还是父进程由系统的调度算法决定,当然可以在父进程加上延时或是调用进程回收函数pcntl_wait ...

  6. python编程图文_深入Python多进程编程基础——图文版

    多进程编程知识是Python程序员进阶高级的必备知识点,我们平时习惯了使用multiprocessing库来操纵多进程,但是并不知道它的具体实现原理.下面我对多进程的常用知识点都简单列了一遍,使用原生 ...

  7. 对PHP并发、多进程、多线程、异步处理、分布式系统的一些了解

    目录 并发 基本概念 PHP并发模型 多进程 基本概念 进程 多进程 并发多任务 任务调度 PHP实现多进程 PCNTL PHP-FPM Swoole 多线程 基本概念 线程 多线程 PHP实现多线程 ...

  8. 01.Android崩溃Crash封装库

    目录介绍 01.该库具有的功能 02.崩溃处理模块 03.网络分析库模块 04.ping库模块 05.该库如何使用 06.后续的需求说明 07.异常栈轨迹原理 08.部分问题反馈 09.其他内容说明 ...

  9. python 多进程并发与多线程并发总结

    本文对python支持的几种并发方式进行简单的总结. Python支持的并发分为多线程并发与多进程并发(异步IO本文不涉及).概念上来说,多进程并发即运行多个独立的程序,优势在于并发处理的任务都由操作 ...

最新文章

  1. mysql slave 能写吗_MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
  2. 产品设计眼中的运营,互联网营销
  3. 与年轻人“玩在一起”的QQ音乐,正抢跑音娱赛道?
  4. ElementUI中el-upload怎样上传文件并且传递额外参数给Springboot后台进行接收
  5. [BZOJ 1048] [HAOI2007] 分割矩阵 【记忆化搜索】
  6. python标准日期正则表达式_Python 正则表达式验证传统日期
  7. Javascript乱弹设计模式系列(1) - 观察者模式(Observer)
  8. react打包后图片丢失_手写Webpack从0编译Vue/React项目
  9. java识别音调_你如何创建一个音调发生器,其音调可以在java中“实时”或动态地操作?...
  10. 三层调用关系_你真正的了解MVC三层架构开发模式吗
  11. 服务器 交换机的维护,服务器路由器交换机维护设置
  12. callback的实现
  13. Text Particle Systems
  14. 《我是一只IT小小鸟》读书笔记
  15. Android源码下载
  16. java创建表情包_表情包生成器
  17. 机器学习数学篇—基础数学知识清单
  18. 超详细open vn搭建之Linux亲测可用
  19. Lua 编程学习笔记
  20. 南京邮电大学微型计算机原理与接口技术实验,南京邮电大学《微机原理与接口技术》上机实验参考答案(四次全).pdf...

热门文章

  1. python 合并区间
  2. 超链接的内部链接和外部链接
  3. 用localStorage实现登录时记住密码的功能
  4. 【html+css练习】小白使用html+css模拟音乐播放器构造了网页音乐播放器--1
  5. 数组去重(包括es6)
  6. mysql查询职位大于3_4、MySQL查询(控制行)
  7. Centos6.5 下安装opencv
  8. 15.基于Hadoop的数据仓库Hive第2部分
  9. 三年程序员之后的思考
  10. 【C++】43.使用【类对象】与 【类指针】的区别