多进程中数据独立,变量无法共享,所以可以使用shmop共享内存实现(cli模式不支持APC扩展),或者存储到redis这种nosql中。

  下面实例,开10个进程结合redis集合,做一些简单的任务处理。

 <?php
for ($i=0;$i<10;$i++){//开10个进程
$ret = pcntl_fork(); //生成进程 if ($ret == 0){ $redis = new Redis();
$redis->connect('127.0.0.1',6379); while (true){ //做一个循环,让进程反复运行 if ($redis->setnx('job',1)==1) {//加锁 if (count($redis->keys('webpub')) == 0){//集合中没有数据跳出继续循环
$redis->del('job'); //解锁
continue;
} $getjob = $redis->zRange('webpub',0,0);//取出一个
var_dump($getjob);
//开启事务
$redis->multi(); //有序集合删除
$redis->zRem('webpub',$getjob[0]);//删除
$redis->del('job'); //解锁 //执行事务代码
$redis->exec(); //下列代表为要执行的任务
file_put_contents('./job/'.$getjob[0].'.html',$getjob[0]); echo $getjob[0].' is done'.PHP_EOL; sleep(1);
}
}
}
}

  上面代码 开启10个进程来处理 redis中 webpub集合中的任务,这里的任务比较简单就是生成文件。值得注意的是,为了防止多个进程之间同时处理一个任务,必须加上锁来限制。

  ps: 不知道上面代码是否有坑,像我这样野生码农涉及点深的东西 就可能会出现各种坑。

最新文章

  1. [LeetCode] Find Right Interval 找右区间
  2. [LeetCode] Add Digits 加数字
  3. android模拟器用命令和DDMS模拟来电和短信
  4. android使用Webview上传图片
  5. FFT(1)
  6. Oracle 经典语法(五)
  7. 怎样做出通用的pos小票打印程序
  8. Struts的ONGL
  9. IBM芯片新功能:诊断癌症
  10. 【Linux】积累笔记
  11. TCP的发送系列 — tcp_sendmsg()的实现(二)
  12. 【转】Js正则表达式
  13. tomcat启动正常,但是访问项目时,404. Eclipse没有正确部署工程项目
  14. python+Django+test 测试数据库生成报错
  15. C++ DLL
  16. MyBatis - 1.入门
  17. 给新手学习Java的建议
  18. 最新apache多域名多站点配置
  19. 关于ArrayAdapter的getCount()的方法会造成空指针异常的分析
  20. L208

热门文章

  1. HDU 1402
  2. BZOJ3033: 太鼓达人(欧拉回路)
  3. Promise的并行和串行
  4. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 20165222
  5. 【thrift】thrift详解
  6. android高速上手(三)经常使用控件使用
  7. 关于Eclipse中import javax.servlet.*出错
  8. pthread访问调用信号线程的掩码(pthread_sigmask )
  9. 黑马程序员【JSP九大内置对象和四个作用域】转载
  10. Java 简单TCP文件传输