上面2篇文都简明了多进程中一些需要注意的地方,这次用多进程配合curl_mulit_*来做新浪微博的采集。

  先把知识点和值得注意的坑列出

/*
需求:开3个进程,并且模拟多线程来采集新浪微博用户信息,cookie用本博客模拟登陆微博文章生成的cookie 知识要点:
1.需要把抓去过的 url放在容器里,请求前比对下即可避免重复抓取。(此程序没有判断,本人比较懒,哎)
2.容器不能为变量,开多个进程会出现问题,因为进程之间数据独立,无法共享。可以使用shmop共享内存实现(cli不支持模式APC扩展)
3.curl发送http请求,抓取的数据通过正则(也可以使用phpQuery第三方库),放入数据库。
4.正则 正则中3个\(即\\\)匹配一个\
*/ /*
* 值得注意的是: 在多进程中使用单例模式会报错 (变量无法共享,比如redis链接,有多少个进程就要创建多少个进程。)
* 参考:
* https://segmentfault.com/q/1010000005023297
* http://blog.csdn.net/towardsyoung/article/details/49245933
*/

主要的执行代码如下:  

 for ($j=0;$j<3;$j++){

     $pid = pcntl_fork();

     if ($pid == 0){

         //$redis = cache::get(); 无法单利模式 ->PHP Fatal error:  Uncaught exception 'RedisException' with message 'read error on connection'
$redis = new Redis();
$redis->connect('127.0.0.1'); $spider->setRedis($redis); while (true){ if ($redis->setnx('job',1)==1) {//加锁 $spider->friend();
$count = $redis->incr(1);
file_put_contents('count2.log',$count);
}
}
exit();
}
}

  ps:当url多的时候,redis的hMset会报错 send 太大的数据。这里就不解决了,不影响正常使用。

  整个实例下载:http://files.cnblogs.com/files/loveyouyou616/caiji.zip

    

  

php多进程pcntl学习(采集新浪微博)的更多相关文章

  1. php多进程pcntl学习-僵尸进程

    上个月写的文章,php多进程pcntl学习(一)现在发现并不完整,因为虽然提到了关闭子进程,但是并没有回收子进程,简单的说就是当子进程比父进程先退出,而父进程没对其做任何处理的时候,子进程将会变成僵尸 ...

  2. php多进程pcntl学习(一)

    pcntl在windows下无法使用,linux编译php时加上参数--enable-pcntl 即可.第一次使用pcntl模块,遇到了一些坑也慢慢填上了,这里简单记录下. 1. 子进程之间变量无法共 ...

  3. php多进程pcntl学习(二)

    多进程中数据独立,变量无法共享,所以可以使用shmop共享内存实现(cli模式不支持APC扩展),或者存储到redis这种nosql中. 下面实例,开10个进程结合redis集合,做一些简单的任务处理 ...

  4. 大数据学习——采集文件到HDFS

    采集需求:比如业务系统使用log4j生成的日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs 根据需求,首先定义以下3大要素 l  采集源,即source——监控文件内容更新 :  ...

  5. 大数据学习——采集目录到HDFS

    采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去 根据需求,首先定义以下3大要素 l  采集源,即source——监控文件目录 :  spoold ...

  6. Python3 多进程编程 - 学习笔记

    Python3 多进程编程(Multiprocess programming) 为什么使用多进程 具体用法 Python多线程的通信 进程对列Queue 生产者消费者问题 JoinableQueue ...

  7. python多进程编程学习笔记

    摘自[https://www.cnblogs.com/chenhuabin/p/10070996.html] by 奥辰 赞

  8. python 多进程使用总结

    python中的多进程主要使用到 multiprocessing 这个库.这个库在使用 multiprocessing.Manager().Queue时会出问题,建议大家升级到高版本python,如2 ...

  9. Node.js superagent 采集 URL 编码问题

    今天在用Node学习采集的时候遇到一个问题,如这个链接地址 http://www.meishij.net/胡萝卜  就是用浏览器的方式访问链接可以打开,但用superagent 去模拟请求,就请求不到 ...

随机推荐

  1. ubuntu16切换hosts软件安装

    之前用ubuntu切换hosts以为没有软件可用,直接用cp来替换hosts文件,今天网上搜了一下发现一个软件和window上用的切hosts功能一样,而且可以支持linux,mac,windows. ...

  2. 《Drools7.0.0.Final规则引擎教程》番外实例篇——相同对象and List使用

    前奏 群组(QQ:593177274)交流中有朋友提出一个问题,怎么实现两个相同对象的插入和比较?相信很多朋友也遇到类似的问题,于是抽时间为大家写一段实例代码,后续代码会同步到GitHub中.下面简单 ...

  3. Jenkins上War文件部署实战

    War文件部署 1.jenkins需要安装Deploy Plugin插件:在[系统管理]-[插件管理]下,如果没有安装,则在可选插件下找到该插件,然后安装(如图是1.5版本安装好的截图) 2.在构建的 ...

  4. C/C++函数中使用可变参数

    先说明可变参数是什么,先回顾一下C++里面的函数重载,如果重复给出如下声明: int func(); int func(int); int func(float); int func(int, int ...

  5. python-websocket-server hacking

    /************************************************************************* * python-websocket-server ...

  6. 6-18 Two Stacks In One Array(20 分)

    Write routines to implement two stacks using only one array. Your stack routines should not declare ...

  7. VUE的使用方法

    vueInit: function() { var _this = this; this.vue = new Vue({ el: '#pa', data: { //存放初始化数据 sourceData ...

  8. 在WPF中使用CefSharp嵌入浏览器(转)

    在WPF中使用CefSharp嵌入浏览器   日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它 ...

  9. C#对Jason序列化匿名对象

    引用: using System.Web.Script.Serialization; 代码: var resp = new { flag = false, url = ConfigReader.Log ...

  10. MySQL分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer

    mysql> select end) as '<60', end) as '60~69', end) as '70~79', end) as '80~89', end) as '>= ...