上面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. JPA中的Page与Pageable

    Page是Spring Data提供的一个接口,该接口表示一部分数据的集合以及其相关的下一部分数据.数据总数等相关信息,通过该接口,我们可以得到数据的总体信息(数据总数.总页数...)以及当前数据的信 ...

  2. android logger的使用

    1. 进入GitHub页面 https://github.com/orhanobut/logger 2. 在gradle里增加 compile 'com.orhanobut:logger:1.15' ...

  3. LG5024 保卫王国

    题意 题目描述 Z 国有\(n\)座城市,\(n - 1\)条双向道路,每条双向道路连接两座城市,且任意两座城市 都能通过若干条道路相互到达. Z 国的国防部长小 Z 要在城市中驻扎军队.驻扎军队需要 ...

  4. 使用_beginThreadex创建多线程(C语言版多线程)

    _beginThreadex创建多线程解读 一.需要的头文件支持 #include <process.h>         // for _beginthread() 需要的设置:Proj ...

  5. TCP/IP详解与OSI七层模型

    TCP/IP协议 包含了一系列构成互联网基础的网络协议,是Internet的核心协议.基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层.网络层.传输层和应用层.下图表示TCP/IP模型与 ...

  6. hadoop YARN配置参数剖析—MapReduce相关参数

    MapReduce相关配置参数分为两部分,分别是JobHistory Server和应用程序参数,Job History可运行在一个独立节点上,而应用程序参数则可存放在mapred-site.xml中 ...

  7. centOS6.6环境下安装AMP

    LAMP --  Linux Apache MySQL PHP 在CentOS安装的顺序,我一般是Apache -> MySQL -> PHP 第一步.安装并配置Apache 1.使用yu ...

  8. 1、hadoop HA分布式集群搭建

    概述 hadoop2中NameNode可以有多个(目前只支持2个).每一个都有相同的职能.一个是active状态的,一个是standby状态的.当集群运行时,只有active状态的NameNode是正 ...

  9. Renesas PPP Mode

    不同厂家的NB/4G/2G,配置PPP模式略有差异,回调配置在如下路径: “synergy\ssp_supplemental\src\framework\sf_cellular_cat3\sf_cel ...

  10. linux下今天遇到的问题

    之前由于测试需要,必须用mysql5.7的客户端, 现在由于产品完善,开始支持5.6,所以需要装5.6的客户端做测试,考虑到手工测试的效率及不可重复性,准备自动化执行原来的用例. 老的用例是用MySQ ...