上面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. vim 编辑 windows下的文本时出现乱码, 修改配置后 已解决

    最近用VIM 查看一个 WINDOWS下的文本,打开以后发现出现乱码,具体如上图. 最后在网上找到了一个解决方法: 原文地址: https://www.zhihu.com/question/22363 ...

  2. emmc boot_config文件不存在

    /******************************************************************************* * emmc boot_config文 ...

  3. mysql下,保存时间时具体时间丢失,只保存了日期的问题

    将日志信息记入数据库时增加了一个时间字段,发现存入数据库时只保留了日期,而没有时分秒信息. 我这边环境是(SRPINGMVC+Mybatis,mysql版本5.6.28以上),java层使用类型为ja ...

  4. 2016-2017-220155329 《Java程序设计》第8周学习总结

    学号 2016-2017-220155329 <Java程序设计>第8周学习总结 教材学习内容总结 了解NIO NIO使用频道来衔接数据节点,在处理数据时,NIO可以让你设定缓冲区容量,在 ...

  5. python(五):面向对象--类和实例

    一.类的基本概念 类是用来创建数据结构和新类型对象的主要机制.一个类定义了一系列与其实例对象密切关联的属性.典型的属性包括变量(也被称为 类变量)和函数(又被称为方法). 1.class上下文 cla ...

  6. 《DSP using MATLAB》Problem 2.17

    1.代码: %% ------------------------------------------------------------------------ %% Output Info abo ...

  7. 51nod 算法马拉松4 D装盒子(网络流 / 二分图最优匹配)

    装盒子   基准时间限制:1 秒 空间限制:131072 KB 分值: 160 有n个长方形盒子,第i个长度为Li,宽度为Wi,我们需要把他们套放.注意一个盒子只可以套入长和宽分别不小于它的盒子,并且 ...

  8. idyll 开源生成交互式web的标记语言试用

    说明 Idyll is an open-source markup language and toolkit for producing interactive web pages You give ...

  9. IMP-00009: 导出文件异常结束 imp

    在一次exp/imp中,用imp导入数据时报错.错误信息如下: IMP-00009: 导出文件异常结束 imp导入时异常结束可以有很多原因造成,要具体问题具体分析. 可能原因一: 导入的数据表过大,而 ...

  10. 【pc杂谈】win7系统通过虚拟网卡共享wifi

    用管理员权限进入dos命令行 启用并设定虚拟WiFi网卡:netsh wlan set hostednetwork mode=allow  ssid=paulnet key=paulwinflo(注意 ...