php多进程pcntl学习(二)
多进程中数据独立,变量无法共享,所以可以使用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: 不知道上面代码是否有坑,像我这样野生码农涉及点深的东西 就可能会出现各种坑。
php多进程pcntl学习(二)的更多相关文章
- php多进程pcntl学习-僵尸进程
上个月写的文章,php多进程pcntl学习(一)现在发现并不完整,因为虽然提到了关闭子进程,但是并没有回收子进程,简单的说就是当子进程比父进程先退出,而父进程没对其做任何处理的时候,子进程将会变成僵尸 ...
- php多进程pcntl学习(一)
pcntl在windows下无法使用,linux编译php时加上参数--enable-pcntl 即可.第一次使用pcntl模块,遇到了一些坑也慢慢填上了,这里简单记录下. 1. 子进程之间变量无法共 ...
- php多进程pcntl学习(采集新浪微博)
上面2篇文都简明了多进程中一些需要注意的地方,这次用多进程配合curl_mulit_*来做新浪微博的采集. 先把知识点和值得注意的坑列出 /* 需求:开3个进程,并且模拟多线程来采集新浪微博用户信息, ...
- emberjs学习二(ember-data和localstorage_adapter)
emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- TweenMax动画库学习(二)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- Hbase深入学习(二) 安装hbase
Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...
- Struts2框架学习(二) Action
Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...
- Python学习二:词典基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...
随机推荐
- SendMessage wMsg常量值参考
namespace Core.WinAPI { /// <summary> /// wMsg参数常量值: /// </summary> public static class ...
- Promise的并行和串行
Promise 并行 这个功能Promise自身已经提供,不是本文的重点.主要是依赖Promise.all和Promise.race. Promise.all是所有的Promise执行完毕后(reje ...
- 《DSP using MATLAB》示例 Example 10.2
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- Error in WCF client consuming Axis 2 web service with WS-Security UsernameToken PasswordDigest authentication scheme
13down votefavorite 6 I have a WCF client connecting to a Java based Axis2 web service (outside my c ...
- centos7 开放mongodb端口
CentOS 7 默认没有使用iptables,所以通过编辑iptables的配置文件来开启端口是不可以的 CentOS 7 采用了 firewalld 防火墙 如要查询是否开启27019端口则: 1 ...
- Http消息头中常用的请求头和响应头
作为Web开发对常用http的请求头和响应头熟悉了解一下还是很有必要的.比如请求头中Content-type指定了请求的内容,若类型是application/x-www-form-urlencoded ...
- 黄聪:如何配置Emeditor实现代码智能识别自动完成功能
设置方法如图所示: 效果如下图所示:
- GridView的HyperLinkField的DataNavigateUrlFormatString如何使用自定义的变量,而不是数据库绑定的值
GridView的HyperLinkField的DataNavigateUrlFormatString如何使用自定义的变量,而不是数据库绑定的值.报错:指定的参数已超出有效值的范围.参数名: inde ...
- jquery内容补充
jquery除了咱们上面讲解的常用知识点之外,还有jquery 插件.jqueryUI知识点 jqueryUI 官网: https://jqueryui.com/ jqueryUI 中文网: http ...
- -bash: /usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory
-bash: /usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory python多版本造成额问题 找不到p ...