• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

php多进程pcntl学习(二)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

 1 <?php
 2 for ($i=0;$i<10;$i++){//开10个进程
 3     $ret = pcntl_fork(); //生成进程
 4 
 5     if ($ret == 0){
 6 
 7         $redis = new Redis();
 8         $redis->connect('127.0.0.1',6379);
 9 
10         while (true){ //做一个循环,让进程反复运行
11 
12             if ($redis->setnx('job',1)==1) {//加锁
13 
14                 if (count($redis->keys('webpub')) == 0){//集合中没有数据跳出继续循环
15                     $redis->del('job'); //解锁
16                     continue;
17                 }
18 
19                 $getjob = $redis->zRange('webpub',0,0);//取出一个
20                 var_dump($getjob);
21                 //开启事务
22                 $redis->multi();
23 
24                 //有序集合删除
25                 $redis->zRem('webpub',$getjob[0]);//删除
26                 $redis->del('job'); //解锁
27 
28                 //执行事务代码
29                 $redis->exec();
30 
31                 //下列代表为要执行的任务
32                 file_put_contents('./job/'.$getjob[0].'.html',$getjob[0]);
33 
34                 echo $getjob[0].' is done'.PHP_EOL;
35 
36                 sleep(1);
37             }
38         }
39     }
40 }

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

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
21 段实用便捷的 PHP 代码(转载别人的) PHP 是目前使用最广泛 ...发布时间:2022-07-10
下一篇:
PHP运行时强制显示出错信息发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap