#!/usr/local/php5/bin/php
<?php
for($i=0;$i<=10;$i++) //开10个进程
{
$ret=pcntl_fork(); //生成进程
if($ret==0)
{
while(true) //做一个循环,让进程反复运行
{
$redis=new Redis();//连接redis
$redis->connect('127.0.0.1',6379);
if(count($redis->keys('webpub'))==0) //判断队列中是否有序列,如果没有则继续 “死”循环
{
continue;
}
if($redis->setnx("job",1)==1) //所谓的加锁
{
$getjob=$redis->zrange('webpub',0,0); //从队列中取出一个
$redis->zrem('webpub',$getjob[0]); //删除当前队列
$redis->del("job"); //解锁
//注意,这里就要用到redis原子事务 multi和exec
//譬如$redis->multi(); //开启事务
//xxoo (注意是和redis相关的命令)
//$redis->exec(); //结束事务
//这个就是执行任务,自定义,这个部分和redis无关
file_put_contents('/usr/local/myapache/htdocs/'.$getjob[0].'.html',$getjob[0]);
echo $getjob[0]."is done".PHP_EOL; //执行完后输出,这里建议变成日志
sleep(1);//休眠一秒
}
}
<?php
for($i=0;$i<=10;$i++) //开10个进程
{
$ret=pcntl_fork(); //生成进程
if($ret==0)
{
while(true) //做一个循环,让进程反复运行
{
$redis=new Redis();//连接redis
$redis->connect('127.0.0.1',6379);
if(count($redis->keys('webpub'))==0) //判断队列中是否有序列,如果没有则继续 “死”循环
{
continue;
}
if($redis->setnx("job",1)==1) //所谓的加锁
{
$getjob=$redis->zrange('webpub',0,0); //从队列中取出一个
$redis->zrem('webpub',$getjob[0]); //删除当前队列
$redis->del("job"); //解锁
//注意,这里就要用到redis原子事务 multi和exec
//譬如$redis->multi(); //开启事务
//xxoo (注意是和redis相关的命令)
//$redis->exec(); //结束事务
//这个就是执行任务,自定义,这个部分和redis无关
file_put_contents('/usr/local/myapache/htdocs/'.$getjob[0].'.html',$getjob[0]);
echo $getjob[0]."is done".PHP_EOL; //执行完后输出,这里建议变成日志
sleep(1);//休眠一秒
}
}