$num = 5;
    $flock_t = true;
    do{
        for($i = 1; $i <= $num ; $i++ ){
            $file_name = $i . '.txt';
            if(is_file($file_name)){
                var_dump( $i . "____等待任务执行中.....<br/>");
            }else{
                $file_info = fopen($file_name,"w+" );        //读取文件
                var_dump($i . "____执行任务中<br/>");
                usleep(5000);
                fclose($file_info);
                unlink($file_name);
                exit;
            }
    }while($flock_t);
1.想弄个列队,5个任务的任务池(5个文件代替数据库),没用数据库是,执行一个任务才5秒时间,用数据库太浪费时间了!
2.上面的代码想实现效果是:
      1步骤。判断文件是否存在,存在就找下个文件(总共5个文件)
      2步骤。如果不存在就-----》创建文件-----》执行任务-----》任务完成删除文件-----》结束程序!问题出在,请求是批量请求的:同时50个请求进来,结果一堆的请求直接执行到 2步骤!然后各种报错。有试过用flock 锁文件的方式,也会出现类似的问题,多个请求的时候,能直接访问到锁住的文件。     

解决方案 »

  1.   

    usleep单位是微秒。你应该改成sleep()
      

  2.   

    5000微秒=0.005秒,一直执行fopen和fclose,能不报错吗。另外你这是循环,不是队列。就算你不报错,执行50次也就停止了。队列应该是while (true){
    worker();
    sleep(5);
    }
      

  3.   

    我觉得这个要配合前端配合ajax来执行,这样用户体验好也会好些,又不用担心超时。